将RSS转换为数组,爆炸'描述'并在每行一个表格中插入一个单词

时间:2010-05-13 16:03:28

标签: php mysql rss explode

我最近才进入php和MySQL,我想要一个RSS提要,把它变成一个数组,只取XML的描述部分,将其爆炸并将其插入MySQL基表的表中。

我觉得这应该是可能的,但现在有点过头了。我尝试使用magpie作为解析器,但如果可能的话我想用更简单的PHP代码来做。

我正在寻找的结果将描述“这是一只猫”并将其插入带有两个字段的表中

ID术语
1这个 2是
3 a 4只猫

我被困在这几天了。任何帮助都会很棒。

基于Matt的帮助,这是我到目前为止所拥有的。服务器似乎有“新MySQLi”标签的问题所以我试图改变它,但它仍然没有在我的表中存放任何东西...

 

$host="*******"; $username="*********"; $password="********"; $database="**********";

mysql_connect($host,$username,$password); @mysql_select_db($database) or die( "Unable to select database");

$parser = xml_parser_create('UTF-8'); $values = array(); xml_parse_into_struct($parser, file_get_contents('*********'), $values);

$query = "INSERT INTO words VALUES('',$word)";

foreach ($values as $entry) { if ($entry['tag'] === 'SUMMARY') { $words = preg_split('/\s+/', strtolower(preg_replace('/[^A-Za-z\s]+/', '', strip_tags($entry['value'])))); foreach ($words as $word) { $query->bind_param('s', $word); $query->execute(); } } }

mysql_close();

谢谢大家!

3 个答案:

答案 0 :(得分:1)

您可以使用RSS阅读器类,例如http://www.phpclasses.org/package/2552-PHP-Retrieve-and-parse-RSS-feeds-extending-feed-reader.html

使用起来非常简单:

include("./files_includes/RSSReader.inc.php"); 
$rss = new RSSReader("http://www.php.net/news.rss");

请参阅http://www.phpclasses.org/browse/file/10759.html

上的示例

我真的不明白为什么你要爆炸描述中的所有单词,但是对于那个类,你可以这样做:

explode(' ',$rss->getItemDescription("rsstext",$i));

请注意,该课程依赖于FeedReader课程:http://www.phpclasses.org/package/1811-PHP-Parse-and-extract-information-from-RSS-2-0-feeds.html - 因此您也需要下载该课程。

答案 1 :(得分:1)

只要RSS提要是有效的XML,您就可以使用PHP的XML parser来执行此操作。

这是一个针对Stack Overflow的Recent Questions feed..

运行的简单示例
<?php
$parser = xml_parser_create('UTF-8');
$values = array();
xml_parse_into_struct($parser, file_get_contents('feed.xml'), $values);

$db = new MySQLi('localhost', 'root');
$db->select_db('test');
$db->query('create table if not exists words (id int unsigned primary key auto_increment not null, word varchar(255) not null)');
$stmt = $db->prepare('insert into words (word) values(?)');

foreach ($values as $entry) {
    if ($entry['tag'] === 'SUMMARY') {
        $words = preg_split('/\s+/', strtolower(preg_replace('/[^A-Za-z\s]+/', '', strip_tags($entry['value']))));
        foreach ($words as $word) {
            $stmt->bind_param('s', $word);
            $stmt->execute();
        }
    }
}

完成后,您可以运行有趣的查询,例如:

select word, count(*) from words
group by word
order by count(*) desc

返回结果集,如:

+------+----------+
| word | count(*) |
+------+----------+
| the  |      127 |
| i    |       90 |
| to   |       74 |
|      |       60 |
| a    |       59 |
| is   |       45 |
| in   |       44 |
| and  |       41 |
| it   |       38 |
| have |       31 |

etc ...

答案 2 :(得分:0)

您需要以VALUES形式的('word1'),('word2'), ...子句结束这样的事情:

$string="This is a cat";
$arr=explode(' ',$string);
array_walk($arr, function(&$v,$i){ $v="('$v')"; }); //php5.3 syntax only, use create_function() otherwise

$values=implode(','$arr);
$query="INSERT INTO mytable(term) VALUES $values";