はるばるITつれづれ人生

日々の出来ことエトセトラ

素人が作るrssフィードプログラム

私がrssフィードで利用しているサンプルプログラム

f:id:asufaruto2009:20150308184938j:plain

 

 rssフィードにはmagpierssを利用しています。

phpではメジャーなフィーダープログラムのようです。

---------------------------------------------------------------------------
// 出力形式、文字コードの指定
//ニュースサイトのIT分野担当
header('Content-type: text/html; charset=UTF-8');

// 必要パッケージの読み込み
require_once ('/var/www/html/magpierss/rss_fetch.inc');

// キャッシュは5分に設定
define('MAGPIE_CACHE_AGE', 60*5);
// キャッシュ保存ディレクトリ指定
define('MAGPIE_CACHE_DIR', '/var/www/html/cache/');
// 取得するエンコーディングの設定
define('MAGPIE_OUTPUT_ENCODING','UTF-8');

// 取得するRSSのURLリスト
$urls = array(
'http://sankei.jp.msn.com/rss/news/west_economy.xml');
// RSSのアイテムリストを取得
$items = getRssList($urls);

echo '<ul>';
foreach ($items as $item) {
$href = mb_convert_encoding($item['link'], "UTF-8", "auto");
$title = mb_convert_encoding($item['title'], "UTF-8", "auto");
$description = mb_convert_encoding($item['description'], "UTF-8", "auto");
$megami = mb_convert_encoding($description, "UTF-8", "auto");

 

//ツイート数カウント用***************************************************************

#$top = 'http://www.gizmodo.jp/2013/12/post_13647.html';
$all = 'http://urls.api.twitter.com/1/urls/count.json?url='.$href;
$Rits = file_get_contents($all);
$Olfe = mb_convert_encoding($Rits, 'UTF-8', 'auto');
$data = json_decode($Olfe);
$tweets = $data->count;

//****************************************************************

$checkman = db_check_urls($href);
$checkman2 = db_check_pr($title);

$nowtimes = date('Ymd');

 


if($checkman == 0 && $checkman2 == 0){

db_put_urls($nowtimes,$href,$title,$description,$tweets);
echo "<li><a href=$href>$title</a><br>$megami<p>$tweets</p><p>$checkman</p></li>";
}else{

}


}
echo '</ul>';

# 結果を出力します。

 

// 複数サイトのRSSのアイテムを取得****************************************************************
function getRssList($urls)
{
$rssitems = array();
foreach ($urls as $url) {
$obj = fetch_rss($url);
$rssitems = array_merge($rssitems, $obj->items);
}
return $rssitems;
}

//***********************************************************************************************
function db_check_pr($japanese){

$moji = mb_substr($japanese,0,2);
if($moji == 'PR'){
return 1;
}else{
return 0;
}
}
//***********************************************************************************************

function db_check_urls($href){

require '/var/www/html/s/database_conf.php';

try {

$db = new PDO($dsn, $dbUser, $dbPass);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

# SQL文を準備します。
$sql = 'SELECT count(*) AS count FROM rssfeeds WHERE urls = :language';
$prepare = $db->prepare($sql);

# 「PHP5.4」「PHP」がそれぞれ、データベースに登録済みかどうかチェックします。
$languages = array($href);
foreach ($languages as $language) {
# SQL文のプレースホルダに値をバインドして、クエリを実行します。
$prepare->bindValue(':language', $language, PDO::PARAM_STR);
$prepare->execute();
# 1列目のカラムの値を結果として取得します。
$result = $prepare->fetchColumn();
if ($result > 0) {
return true;
}else{
return false;
}
}
# エラーが発生した場合、PDOException例外がスローされるのでキャッチします。
} catch (PDOException $e) {
echo 'エラーが発生しました。内容: ' . h($e->getMessage());
}

function h($var) // HTMLでのエスケープ処理をする関数
{
return htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
}
}

//******************************************************************
function db_put_urls($nowtimes,$href,$title,$description,$tweets){
require '/var/www/html/s/database_conf.php';
try {
# MySQLデータベースに接続します☆レシピ260☆(データベースに接続したい)。
$db = new PDO($dsn, $dbUser, $dbPass);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sikibetu = 2;
$moto = "MSN産経west";
# SQL文を準備します。

$sql = 'insert into rssfeeds (id, time,urls,title,contents,tweets,times,kubetu,teikyo) values (?, ?, ?, ?, ?, ?, ?, ?, ?)';

$prepare = $db->prepare($sql);
# SQL文のプレースホルダに値をバインドして、クエリを実行します。
$prepare->bindValue(1, 0, PDO::PARAM_STR);
$prepare->bindValue(2, $nowtimes, PDO::PARAM_STR);
$prepare->bindValue(3, $href, PDO::PARAM_STR);
$prepare->bindValue(4, $title, PDO::PARAM_STR);
$prepare->bindValue(5, $description, PDO::PARAM_STR);
$prepare->bindValue(6, $tweets, PDO::PARAM_STR);
$prepare->bindValue(7, 'cast( now() as datetime)', PDO::PARAM_STR);
$prepare->bindValue(8, $sikibetu, PDO::PARAM_STR);
$prepare->bindValue(9, $moto, PDO::PARAM_STR);
$prepare->execute();

# エラーが発生した場合、PDOException例外がスローされるのでキャッチします。
} catch (PDOException $e) {
echo 'エラーが発生しました。内容: ' . h($e->getMessage());
}
}
----------------------------------------------------------------------------------

 

mysqlの接続にはPDOを利用しています。

データベース上に同じ記事がないか判断します。

Linuxのcronで自動で動かすことができます。

サンプルですので運用までは難しいかもしれませんが、

なにかの参考になれば良いかと思います。