|
|
|
| Вообщем вопрос таков.
У меня есть сайт ,который парсит XML стороннего сайта (API,все лицензионно).
Парсить то парсит ,выдает контент ,который парсит,все здорого .
Но тут передо мной встала проблема ,как сделать так чтобы парсер парсил только те топики ,в которых содержатся слова в my.txt (по словарю)
Заранее спаибо!
Юзаю simple_html_dom | |
|
|
|
|
|
|
|
для: clon
(04.06.2013 в 12:50)
| | Вы бы показали пример спарсенных данных....
Не совсем понятно
> так чтобы парсер парсил только те топики ,в которых содержатся слова в my.txt
Нужно именно не парсить или не выдавать в результате (т.е. спарсить, потом удалить)?
В общем виде можно загрузить содержимое в массив ( функцией file() )
пройтись по результату в цикле, проверить таким образом:
<?php
$s = file('my.txt');
foreach($result as $k => $v)
if( strlen($v) == strlen( str_replace( $s, '', $v ) ) )
unset( $result[$k] );
|
| |
|
|
|
|
|
|
|
для: Sfinks
(04.06.2013 в 13:22)
| |
<div data-role="page" data-url="/twitter/submit.php" data-external-page="true" tabindex="0" class="ui-page ui-body-c ui-page-active" style="min-height: 452px;">
-----------------------------------NEWS----------------------------------------------------------------
<br>
<h1>Контент:danrock_web: asdasdasdasdasd</h1><br><h1>Создано:Tue, 04 Jun 2013 06:07:47 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: asdasodhasjkldkajshd</h1><br><h1>Создано:Tue, 04 Jun 2013 06:07:44 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: 12312321312321</h1><br><h1>Создано:Tue, 04 Jun 2013 06:07:40 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: testtesttesttesttest</h1><br><h1>Создано:Tue, 04 Jun 2013 06:06:35 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: test</h1><br><h1>Создано:Tue, 04 Jun 2013 06:06:21 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: olololoo</h1><br><h1>Создано:Tue, 04 Jun 2013 06:06:18 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: ldldld</h1><br><h1>Создано:Tue, 04 Jun 2013 06:06:13 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: asdasda123123sd</h1><br><h1>Создано:Tue, 04 Jun 2013 06:06:09 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: asdasdsadasd</h1><br><h1>Создано:Tue, 04 Jun 2013 06:06:00 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: asdsadasdasd</h1><br><h1>Создано:Tue, 04 Jun 2013 06:05:57 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: asdasdasd</h1><br><h1>Создано:Tue, 04 Jun 2013 06:05:55 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: sdadasdsa</h1><br><h1>Создано:Tue, 04 Jun 2013 05:32:18 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: asdkjsakjd</h1><br><h1>Создано:Tue, 04 Jun 2013 05:32:16 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: 213213213213</h1><br><h1>Создано:Tue, 04 Jun 2013 05:32:11 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: 123213</h1><br><h1>Создано:Tue, 04 Jun 2013 05:32:09 +0000</h1><br><br>
<hr>
<h1>Контент:danrock_web: Hello Edward Numbless ,FSPO ITMO 233 parser for twitter</h1><br><h1>Создано:Tue, 04 Jun 2013 05:20:14 +0000</h1><br><br>
<hr>
</div>
|
Вот выдача -это парсинг twitter'a у меня проблема с тем что я не могу сделать так чтобы показывало посты ,только с теми словами которые есть в файле my.txt | |
|
|
|
|
|
|
|
для: clon
(04.06.2013 в 14:42)
| | И зачем нам данные, которые выводит скрипт? Ни о чём не говорят.
Исходный код скрипта нужен.
Вкратце так:
<?php
$arr = file('my.txt'); // получение массива строк из файла
$ct = count($arr);
// .........тут вывод записей в цикле
for($i = 0; $i < $ct; $i++) // это вложенный цикл должен быть
if(stripos($text, $arr[$i]) !== false) {
// здесь вывод строки всех данных поста
break;
}
// $text - переменная с текстом поста
?>
|
Есть вариант использовать регулярные выражения, но не знаю будет ли это быстрей, можно поэкспериментировать. Что-то вроде этого:
<?php
$str = implode('|', file('my.txt'));
if(preg_match('/' . $str . '/i', $text)) ....
?>
|
| |
|
|
|
|
|
|
|
для: DangerBay
(04.06.2013 в 18:17)
| | вот исходник
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>danrock rss grabber</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
<title>danrock twitter parser</title>
<link rel="stylesheet" href="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.css">
<link rel="stylesheet" href="css/style.css">
<!-- Extra Codiqa features -->
<link rel="stylesheet" href="codiqa.ext.css">
<!-- jQuery and jQuery Mobile -->
<script src="https://d10ajoocuyu32n.cloudfront.net/jquery-1.9.1.min.js"></script>
<script src="https://d10ajoocuyu32n.cloudfront.net/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
<!-- Extra Codiqa features -->
<script src="https://d10ajoocuyu32n.cloudfront.net/codiqa.ext.js"></script>
</head>
<body>
<?php
/***header('Content-type: text/html; charset=utf-8');
include_once('simple_html_dom.php');
$html = file_get_html('http://www.unmultimedia.org/radio/russian/');
echo "<table border=10>";
foreach($html->find('div[id=primaryTopSidebar]') as $element)
echo $o[1],$element->innertext . '<br>';
echo "</table>";
**/
echo"-----------------------------------NEWS----------------------------------------------------------------\n";
echo"<br/>";
?>
<?php
include_once('simple_html_dom.php');
header('Content-type: text/html; charset=utf-8');
//https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=danrock_web
//api xml
//$content = file_get_contents("http://www.un.org/ru/rss/ru_rss_news_un.xml");
//$x = new SimpleXmlElement($content);
//echo "<table border=10>";
//Поиск внутри файла
//foreach ($x->channel->item as $entery)
//{
echo "<tr>";
echo "<td>";
$Nazvanie='Заголовок:';
$Opisanie='Контент:';
$Poln='ПОЛНЫЙ ТЕКСТ:';
$Sozdanie='Создано:';
// Создать контекст и получить XML с сайта
$go=($_POST['go']);
$path="https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=".$go;
$ctx = stream_context_create(array('http' => array('timeout' => 6)));
$file = file_get_contents($path, 0, $ctx);
if ($file) {
// Распарсить полученный XML
$rss = simplexml_load_string($file);
foreach ($rss->channel->item as $item){
//echo $Nazvanie,$item->title.'<h1>';
//echo '<h1>'.$Nazvanie,$item->title.'</h3>';
// echo "<br>";
//echo "</td>";
//echo "<tr>";
//echo $Poln,$entery->yandex:full-text;
//echo "<br>";
//echo "</td>";
//echo "<tr>";
echo '<strong>'.'<h1>'.$Opisanie,$item->description.'</h2>'.'</strong>';
echo "<br>";
echo "</td>";
echo "<tr>";
echo '<h5>'.$Sozdanie,$item->pubDate.'</h5>';
echo "<br>";
echo "</td>";
echo "<tr>";
//echo "<iframe src=\"".$item->link."\"></iframe>";
//echo "<br>";
//echo $item->category;
//echo "<br>";
//echo "</td>";
//echo "<tr>";
//}
//echo "</table>";
//echo $entery->description;
//// echo "</td>";
//echo "<tr>";
}
}
?>
</body>
</html>
|
мучаюь уже куча времени,была идея загнать спарсенные даных в массив ,потом циклом проверить и вывести результат по условию,но у меня мало опыта с php,поэтому обращаюсь к вам. | |
|
|
|
|
|
|
|
для: clon
(04.06.2013 в 19:38)
| | Тестировал на словаре в 300 слов. Через регулярку в 3 раза быстрей, чем циклом обходить, что неудивительно.
Правда тогда ограничение по количеству слов в словарю. Если словарь большой, то придется использовать вариант с циклом.
<?php
$str = implode('|', array_map('trim', file('my.txt')));
foreach ($rss->channel->item as $item){
if(preg_match('/' . $str . '/i', $item->description)) {
// вывод данных...........
echo '<strong>'.'<h1>'.$Opisanie,$item->description.'</h2>'.'</strong>';
echo "<br>";
echo "</td>";
echo "<tr>";
echo '<h5>'.$Sozdanie,$item->pubDate.'</h5>';
echo "<br>";
echo "</td>";
echo "<tr>";
}
|
| |
|
|
|
|
|
|
|
для: DangerBay
(04.06.2013 в 20:26)
| | Спасибо ,я уже разобрался,только теперь такой вопрос,как мне выдать ошибку 404 вместо
Warning: preg_match(): Unknown modifier 'c' in /home/u484003877/public_html/twitter/submit.php on line 124 | |
|
|
|
|
|
|
|
для: clon
(05.06.2013 в 00:02)
| | Нормально, вместо того чтобы найти баг в собственном коде (какой-то левый модификатор c), будем выдавать "Страница не найдена"... Как же вы действительно пишите то, вопрос. | |
|
|
|
|
|
|
|
для: clon
(05.06.2013 в 00:02)
| | в вашем файле my.txt слова в каком формате?
Должны быть записаны так:
Есть ли символ ?
Эту строчку
if(preg_match('/' . $str . '/i', $item->description)) {
|
попробовать заменить на
if(preg_match('@' . $str . '@i', $item->description)) {
|
| |
|
|
|
|
|
|
|
для: DangerBay
(05.06.2013 в 01:11)
| | if(preg_match('@' . $str . '@i', $item->description)) {
этот код не работает | |
|
|
|