我最近才进入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();
谢谢大家!
答案 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";