-2

最近 PHP と MySQL を始めたばかりで、RSS フィードを取得して配列に変換し、XML の説明部分のみを取得して展開し、MySQL ベースのテーブルに挿入したいと考えています。

これは可能であるべきだと思いますが、今は少し頭を悩ませています。カササギをパーサーとして使ってみたのですが、できればもっとシンプルなphpコードでやりたいです。

私が探している結果は、「これは猫です」という説明を取り、それを2つのフィールドを持つテーブルに挿入します

ID用語
1 この
2 は
3 a
4 ネコ

私はこれに数日間困惑しています。どんな助けでも素晴らしいでしょう。

ここでのマットの助けに基づいて、私はこれまでに持っているものです. サーバーの「new 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();

みんな、ありがとう!

4

3 に答える 3

1

http://www.phpclasses.org/package/2552-PHP-Retrieve-and-parse-RSS-feeds-extending-feed-reader.htmlなどのRSSリーダークラスを使用できます。

使い方はとても簡単です。

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-soあなたもそれをダウンロードする必要があります。

于 2010-05-13T16:10:28.960 に答える
1

RSS フィードが有効な XML である限り、PHP のXML パーサーを使用してこれを行うことができます。

Stack Overflow の最近の質問フィードに対して実行する簡単な例を次に示します。

<?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 ...
于 2010-05-13T16:35:28.397 に答える
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";
于 2010-05-13T16:22:35.210 に答える