アンテナサイトに自作タグクラウドを設置する Part 2

前回の更新からだいぶ時間が空きましたが、タグクラウドっぽいものを作っていきたいと思います。

まず、RSSの更新情報をMySQLのデータベースに追加していきます。RSS収集にはSimplePieを使います。SimplePie(ver.1.3.1)をRSS更新用プログラム(今回はRSStoMySQL.phpとします。)は同じ階層に置きました。

RSStoMySQL.phpを作っていきます。MySQLに接続して、データベースを選択します。

[crayon]

$link = mysql_connect('DB_place', 'User', 'Password');
if (!$link) {
die('error接続失敗です。'.mysql_error());
}
print('<p>ok接続に成功しました。</p>');
//database name is "database"
$db_selected = mysql_select_db('database', $link);
if (!$db_selected){
die('データベース選択失敗です。'.mysql_error());
}
print('<p>データベースを選択しました。</p>');

[/crayon]

次にRSSを読み込んでいきます。$RSSlist配列には読み込みたいRSSのURLが入っています。本当は最新記事を過去記事と照合したりして新規の記事を判定すべきなのですが、今回は各記事の投稿時間が「サーバーの現在時間より過去で、3610秒(1時間+ちょっと余裕を見て10秒)以内に投稿された記事」をデータベースに追加していく使用です。MySQLで使えない文字はエスケープしておかないと、(特に芸能人・タレントさんなどの)顔文字が多用されているブログでは結構な割合でエラーを吐きます。

[crayon]

for ($i = 0 ; $i < count($RSSlist); $i++) {

require_once("./autoloader.php");

$feed = new SimplePie();
$feed->set_feed_url($RSSlist[$i]);
$feed->set_cache_location("cache/");//保存するディレクトリ
$feed->set_cache_duration(300); //単位は秒で指定
$feed->init();
$feed->handle_content_type();

foreach ($feed->get_items(0, 1) as $item) {
$site =$item->get_feed()->get_title();
$link = $item->get_permalink();
$title = $item->get_title();
$date = $item->get_date("Y-m-d H:i:s");
$description = $item->get_description();
$content = $item->get_content();//記事の中身です。
$author = $item->get_author();
$category = $item->get_category();
if(strtotime($now) - strtotime($date)<3610 && strtotime($now) - strtotime($date)>0){

/* 結果の行数取得 */
$result = mysql_query('SELECT id,site_title,item_title,item_url,item_description,item_creater,item_date,item_img,item_summ FROM 出力テーブル名');
if (!$result) {
die('SELECTクエリーが失敗しました。'.mysql_error());
}

$numRows=mysql_num_rows($result) or die("行数取得失敗です: ".mysql_error());
echo $numRows."行<br />\n";
echo $date;

print('<p>データを追加します。</p></br></br></br>');
echo date( "Y/m/d (D) H:i:s", time() );
$now = date( "Y-m-d H:i:s", time() );

//MySQLのためにシングルクォーテーションを回避する。
$site = mysql_real_escape_string($site);
$title = mysql_real_escape_string($title);
$link = mysql_real_escape_string($link);
$description = mysql_real_escape_string($description);
$content = mysql_real_escape_string($content);
$author = mysql_real_escape_string($author);
$img = mysql_real_escape_string($img);
$sql = "INSERT INTO 出力テーブル名 (id,site_title,item_title,item_url,item_description,item_creater,item_date,item_img,item_summ) VALUES ($numRows +1, '$site','$title','$link','$content','$author','$date','$img','$description')";
$result_flag = mysql_query($sql);

if (!$result_flag) {
die('INSERTクエリーが失敗しました。'.mysql_error());
}
}
}

[/crayon]

これでRSSから記事を引っ張ってきてDBに突っ込むところまで出来ました。 ソースコードの文字化けの「&gt;」は「>」、「&lt;」は「<」です。

次の記事ではタイトルからキーフレーズを抽出していきたいと思います。


素人が始めるプログラミングと投資のブログ

インデックスファンドへの投資を中心に自分の実体験を報告していく予定です。ゆくゆくはAIやdeep learningを使用して株価予測や自動ポートフォリオ作成も行っていきたいです。