Twitpic×Twitter×WordPressで作る写真ブログ ITかあさん

ITかあさん

Twitpic×Twitter×WordPressで作る写真ブログ

1Tweetを1ページにする、お手軽ブログ

前々から『Twitterでの投稿をWordpressに反映させたい!』と思っていました。
もっと手軽に、もっと簡単なブログの更新方法は無いかと考えた結果、
『1Tweetを1ページにする、お手軽ブログ』を作りました。
また、どうせならTwitpicで投稿された内容も表示して、絵日記のような、写真日記を作りたかったのですが、ついに完成しました。

必要なもの

・wrodpress
・Mysql
・PHP
・Twitterアカウント
・Pear:MDB2

特徴と動作方法

あらかじめWordpressのインストールを完了させておく必要があります。
以下のスクリプトを設置したURLにアクセスされると、15件分のツイートをWordpressに1ツイート1記事にしてくれます。
重複登録回避で、最後に登録したデータと、新しいデータを比べて、最後に登録されたデータより日時が新しければ登録します。そうでなければ登録しません。
xmlが17件くらいしかツイートデータを拾ってくれなかったので、それ以上だと拾いきれないと思います。
Twitterでは短縮URL化されたものは、URLは元の短縮前のものに置き換わります。
写真の表示はTwitpicしか対応していません。
以下のスクリプトをどこかのWEBページにおいて、アクセスすると、書き込みを開始します。
正規表現でハッシュタグは削除されます。
ブログのタイトルはツイートのテキストの部分だけ。URL、ハッシュ、RTタグは正規表現で削除されます。
(けっこう重たいです)
なので、どこかのWEB環境において、Cronで定期実行してあげることで 自働で書き込みされるようにしてあげてください。
なお、Noticeエラー出ちゃってますが、書き込みには支障ないです。
何はともあれ最大の特徴は1ツイートを1ブログでTwitpicを表示できること。これで写真ブログになります。
あと、URLは元のURLに置き換えられているので、自分のブログのURL付きでツイートすれば、SEO効果も見込めると思います。

個人的に作ったものなので、動作の保障はしません。あくまで自己責任でお願いします。

  1. require_once 'MDB2.php';//ライブラリのロード  
  2. //DSN  
  3.   $db = "mysql://ユーザー名:パスワード@localhost/データベース名?charset=utf8";  
  4. //接続  
  5.   $mdb2 =& MDB2::factory($db);  
  6. //フェッチモード設定  
  7.   $mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);  
  8. //SQL文発行  
  9.   $sqlStr = "select * from wp_posts order by post_date desc limit 1";  
  10.   $res = $mdb2->queryAll($sqlStr);   
  11. $update = $res[0]['post_date'];//最終投稿の日付取得  
  12. //URL置き換えフォーマット  
  13.   function square($short_url){  
  14.   $h = get_headers($short_url,true);  
  15.   if(isset($h['Location'])){  
  16.   $long_url = $h['Location'];  
  17.   if(is_array($long_url)){  
  18.   $long_url = end($long_url);  
  19.   }  
  20.   }  
  21.   return $long_url;  
  22.   }  
  23. $contents = file_get_contents('http://twitter.com/statuses/user_timeline.xml?id=自分のTwitterアカウント');  
  24. //XMLをオブジェクトに変換  
  25.   $xml = simplexml_load_string($contents);  
  26.   //XMLオブジェクトを扱いやすいよう、通常の配列に一度変換を行う  
  27.   $arrayA = array();  
  28. for ($i = 0; $i <= 15; $i++) {  
  29.   $arrayA[$i]['title'] = (string)$xml->status->$i->text;  
  30.   $arrayA[$i]['updated'] = (string)$xml->status->$i->created_at;  
  31.   }  
  32. $twitter_array = array();  
  33.   foreach($arrayA as $val => $twitter){  
  34.   preg_match_all("/http:\/\/[a-z0-9\/\-_\.]+/i",$twitter['title'],$match);  
  35.   
  36. foreach($match[0] as $match_url){  
  37. $URL = square($short_url = $match_url);//短縮化されたURLに一度アクセスをし、正規のURLを取得する処理  
  38.   $twitter_array[$val]['url'][] = $URL;  
  39.   }  
  40. $twitter['title'] = preg_replace("/http:\/\/[a-z0-9\/\-_\.]+/i","",$twitter['title']);  
  41. //RTタグを削除  
  42.   $twitter['title'] = preg_replace("/[QR]T ?@[a-z0-9_]+:?/i","",$twitter['title']);  
  43. //返信を削除  
  44.   $twitter['title'] = preg_replace("/@[a-z0-9_]+:?/i","",$twitter['title']);  
  45. //ハッシュタグを削除 日本語対応  
  46.   $twitter['title'] = preg_replace("/(?:^|[^ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9&_\/]+)[##]([ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9_]*[ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z]+[ー゛゜々ヾヽぁ-ヶ一-龠a-zA-Z0-9a-zA-Z0-9_]*)/","",$twitter['title'], -1);  
  47. //ハッシュタグを削除 数字のみのハッシュタグを削除  
  48.   $twitter['title'] = preg_replace("/[##]([0-9_])+:?/i","",$twitter['title']);  
  49. //ハッシュタグを削除 半角英字のみ  
  50.   $twitter['title'] = preg_replace("/[##]([a-zA-Z0-9])+:?/i","",$twitter['title']);  
  51. $twitter_array[$val]['title'] = $twitter['title'];//Twitterのテキスト  
  52. $twitter_array[$val]['updated'] = date('Y-m-d H:i:s'strtotime($twitter['updated']));  
  53. //もしURLがセットされていたら  
  54.   if(isset($twitter_array[$val]['url'])){  
  55.   //画像出力用のURL  
  56.   foreach($twitter_array[$val]['url'as $url){  
  57.     
  58.   if(strstr($url,"twitpic") == false){  
  59.   //ツイート内容にhrefでリンクを付ける  
  60.   $twitter_array[$val]['text'] .= '<a href="'.$url.'">'.$twitter['title']."</a>";  
  61.   }else{  
  62.   $str = substr($url, -6);  
  63. $twitter_array[$val]['text'] .= '<a href="'.$url.'"><img src="http://twitpic.com/show/full/'.$str.'.jpg"/></a>';  
  64. }  
  65. }  
  66. }else{  
  67.   //Tweet中にURLが特に含まれていなかったら  
  68.   $twitter_array[$val]['text'] = $twitter['title'];   
  69.   }  
  70.   }  
  71.   
  72. //Twitter投稿をWordpressに登録する  
  73.   foreach($twitter_array as $view){  
  74. //最終投稿より、日時が新しければ登録実行  
  75.   if($res[0]['post_date'] < $view['updated']){  
  76.   
  77. $mdb2->exec("INSERT INTO `wp_posts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES  
  78.   (1, '{$view['updated']}''{$view['updated']}''{$view['text']}''{$view['title']}''''publish''open''open''''test''''''{$view['updated']}''{$view['updated']}''', 0, 0, 'post''', 0)");  
  79. }  
  80. }