セミオート更新ブログを作る@xml → php → WordPress

別の場所で
各サイトのXML(RSS)を引っ張ってきて自分のブログに投稿するというしろもの
を作ってみたので作り方っぽい物を載せておきます。

■他所(FC2ブログ)のXMLを取得して自分のブログへ投稿を行います。
※XML-RPCの解説サイトを見たほうが早いかもしらん。

■準備するもの
・PHP5が入ってるサーバー
 Xreaとか色々できそうでオススメ。
 なんでPHP5? → 使ってるXMLパース用のメソッドが5にしか無いため。

・Wordpress本体
 インストールは終えておく。
 設定>投稿設定のリモート投稿:XML-RPCにチェックを入れて更新。

・エディタ
 NoEditorとかEmeditorとか

・取得するRSSのアドレス
 http://~~~xmlとか。
 今回はFC2ブログのものを取得します。

■流れ的な
XMLを取りに行く

取得したXMLのVerチェック

XMLのノードをHTMLで出力できるように並べる

IXR_Libraryを使ってXML-RPC接続を行う

Wordpressへ投稿する

カテゴリを変更する

おしまい。

■ソース

<br /> <?php xmlLoad(" 取得先XMLのURL "); $AllCount = 0; $TodayTitle; $MasterSpark; function xmlLoad($xmlUrl){ $fileName = $xmlUrl; $xml = simplexml_load_file($fileName); $xmlVer = $xml["version"]; //もっと詳しくVerチェックしたほうが良いです。 //FC2を前提にしているので非常に簡単にチェックしてます。 if($xmlVer == "2.0"){ //rssV20($xml); }else if($xmlVer == null){ rssV11($xml); } } function rssV11($xml){ global $AllCount; global $TodayTitle; global $MasterSpark; $dc = "http://purl.org/dc/elements/1.1/"; $count = count($xml->children()->item);<br /> /*<br /> $nowYear = &#8220;2009&#8221;;<br /> $nowMonth = &#8220;03&#8221;;<br /> $nowDay = &#8220;13&#8221;;<br /> */<br /> $nowYear = date(&#8220;Y&#8221;);<br /> $nowMonth = date(&#8220;m&#8221;);<br /> $nowDay = date(&#8220;d&#8221;);<br /> for($i=0;$i<$count;$i++){ $entryDay[$i] = $xml->item[$i]->children($dc)->date;<br /> if(preg_match(&#8220;/($nowYear)-($nowMonth)-($nowDay)/&#8221;,$entryDay[$i],$m1)){<br /> $publish = &#8220;</p> <div class='entry-layer'>&#8220;;<br /> $publish .= &#8220;</p> <div class='entry-title'><a href='". $xml->item[$i]->link .&#8221;&#8216; target=&#8217;_blank&#8217;>&#8221;. $xml->item[$i]->title. &#8220;</a></div> <div class='entry-from'>&#8220;. $xml->channel->title .&#8221;</div> <p>&#8220;;<br /> //$publish .= &#8220;</p> <p class='sub-desc'>&#8220;. $xml->item[$i]->description .&#8221;</p> <p>&#8220;;<br /> $publish .= &#8220;</p> <div class='clear'> &nbsp;</div> <p>&#8220;;<br /> $publish .= &#8220;</p></div> <p>&#8220;;<br /> $TodayTitle[$i] .= $xml->item[$i]->title .&#8221;|&#8221;;<br /> $MasterSpark .=$publish;<br /> }else{<br /> //<br /> }<br /> }<br /> }<br /> include_once(&#8216;IXR_Library.php&#8217;);<br /> $site_url = &#8216; サイトアドレス &#8216;;<br /> $userid = &#8216; ログインID &#8216;;<br /> $userpw = &#8216; ログインパス &#8216;;<br /> //wordpressのxmlrpc.phpがある場所を指定<br /> $base_uri = $site_url . &#8216;xmlrpc.php&#8217;;<br /> //接続パラメータ<br /> $encoding = &#8216;UTF-8&#8217;;<br /> $method = &#8216;metaWeblog.newPost&#8217;;<br /> $titleStock = mb_substr($TodayTitle[0],0,60,&#8217;UTF-8&#8242;);<br /> print($titleStock);<br /> $title = $titleStock;<br /> $description = $MasterSpark;<br /> //実際に送るデータ<br /> $params = array(<br /> 1,<br /> $userid,<br /> $userpw,<br /> array(<br /> &#8216;title&#8217; => $title,<br /> &#8216;description&#8217; => $description<br /> ),<br /> 0, //0:草案 1:公開<br /> );<br /> print_r($params);<br /> // XML-RPC通信をする<br /> $client = new IXR_Client($base_uri);<br /> $return = $client->query($method, $params);<br /> if ( !$return ) {<br /> echo $client->getErrorCode() . &#8216;:&#8217; . $client->getErrorMessage() . &#8216;n&#8217;;<br /> exit();<br /> }<br /> $postid = $client->getResponse(); //PostIDの取得<br /> //カテゴリ変更<br /> $method = &#8216;mt.setPostCategories&#8217;;<br /> $categories = array(&#8216;categoryId&#8217;=>&#8217;3&#8217;); //変更後のカテゴリID<br /> //実際に送るデータ<br /> $params = array(<br /> $postid,<br /> $userid,<br /> $userpw,<br /> $categories<br /> );<br /> // XML-RPC通信をする<br /> $client = new IXR_Client($base_uri);<br /> $return = $client->query($method, $params);<br /> if ( !$return ) {<br /> echo $client->getErrorCode() . &#8216;:&#8217; . $client->getErrorMessage() . &#8216;n&#8217;;<br /> exit();<br /> }<br /> ?><br />

上のソースを適当に名前(get.phpなど)をつけてサーバーにアップ。同じディレクトリにIXR_Library.phpも上げておいてください。
アップしたphpファイルにブラウザからアクセスを行うとRSS取得~投稿までが実行されます。
このままじゃ知らない人がアクセスしてきた時にも投稿が実行されてしまうので、その辺はBasic認証でもかけて大丈夫なようにしておく感じで。

アクセスした日付の情報のみを投稿するようにしています。
途中コメントアウトで日付が書いてあるところは、その日中にアクセスできず更新できなかった時用に。
そのあたりはオモテの画面にテキストボックスなんかを用意しといて送信されてから実行するような作り方にしておけばいいのですが、面倒なので直接書いてしまってます。

■後書き
上記程度くらいの利用ならソーシャルブックマークとかRSSリーダーに入れておいた方が手間無し。
発展させた形で利用するのが良いんです。
・複数サイト同時更新
・製品情報横取り
・2chブログ系アンテナ

などなど・・・

また、Cronが動かせるサーバーならフルオートも可能に。
ほっといても勝手に更新してくれる。
手間かかからなくて良いんだけど、ぬくもりが皆無。

■参考サイト・ページ
phpとpearでXML-RPCを利用してWordPressへ投稿
Notes: WordPress XML-RPC API
XML-RPC 投稿日時を指定してWordPressへ投稿する

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>