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効果も見込めると思います。

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

require_once 'MDB2.php';//ライブラリのロード
//DSN
  $db = "mysql://ユーザー名:パスワード@localhost/データベース名?charset=utf8";
//接続
  $mdb2 =& MDB2::factory($db);
//フェッチモード設定
  $mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
//SQL文発行
  $sqlStr = "select * from wp_posts order by post_date desc limit 1";
  $res = $mdb2->queryAll($sqlStr); 
$update = $res[0]['post_date'];//最終投稿の日付取得
//URL置き換えフォーマット
  function square($short_url){
  $h = get_headers($short_url,true);
  if(isset($h['Location'])){
  $long_url = $h['Location'];
  if(is_array($long_url)){
  $long_url = end($long_url);
  }
  }
  return $long_url;
  }
$contents = file_get_contents('http://twitter.com/statuses/user_timeline.xml?id=自分のTwitterアカウント');
//XMLをオブジェクトに変換
  $xml = simplexml_load_string($contents);
  //XMLオブジェクトを扱いやすいよう、通常の配列に一度変換を行う
  $arrayA = array();
for ($i = 0; $i <= 15; $i++) {
  $arrayA[$i]['title'] = (string)$xml->status->$i->text;
  $arrayA[$i]['updated'] = (string)$xml->status->$i->created_at;
  }
$twitter_array = array();
  foreach($arrayA as $val => $twitter){
  preg_match_all("/http:\/\/[a-z0-9\/\-_\.]+/i",$twitter['title'],$match);

foreach($match[0] as $match_url){
$URL = square($short_url = $match_url);//短縮化されたURLに一度アクセスをし、正規のURLを取得する処理
  $twitter_array[$val]['url'][] = $URL;
  }
$twitter['title'] = preg_replace("/http:\/\/[a-z0-9\/\-_\.]+/i","",$twitter['title']);
//RTタグを削除
  $twitter['title'] = preg_replace("/[QR]T ?@[a-z0-9_]+:?/i","",$twitter['title']);
//返信を削除
  $twitter['title'] = preg_replace("/@[a-z0-9_]+:?/i","",$twitter['title']);
//ハッシュタグを削除 日本語対応
  $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);
//ハッシュタグを削除 数字のみのハッシュタグを削除
  $twitter['title'] = preg_replace("/[##]([0-9_])+:?/i","",$twitter['title']);
//ハッシュタグを削除 半角英字のみ
  $twitter['title'] = preg_replace("/[##]([a-zA-Z0-9])+:?/i","",$twitter['title']);
$twitter_array[$val]['title'] = $twitter['title'];//Twitterのテキスト
$twitter_array[$val]['updated'] = date('Y-m-d H:i:s', strtotime($twitter['updated']));
//もしURLがセットされていたら
  if(isset($twitter_array[$val]['url'])){
  //画像出力用のURL
  foreach($twitter_array[$val]['url'] as $url){
  
  if(strstr($url,"twitpic") == false){
  //ツイート内容にhrefでリンクを付ける
  $twitter_array[$val]['text'] .= '<a href="'.$url.'">'.$twitter['title']."</a>";
  }else{
  $str = substr($url, -6);
$twitter_array[$val]['text'] .= '<a href="'.$url.'"><img src="http://twitpic.com/show/full/'.$str.'.jpg"/></a>';
}
}
}else{
  //Tweet中にURLが特に含まれていなかったら
  $twitter_array[$val]['text'] = $twitter['title']; 
  }
  }

//Twitter投稿をWordpressに登録する
  foreach($twitter_array as $view){
//最終投稿より、日時が新しければ登録実行
  if($res[0]['post_date'] < $view['updated']){

$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
  (1, '{$view['updated']}', '{$view['updated']}', '{$view['text']}', '{$view['title']}', '', 'publish', 'open', 'open', '', 'test', '', '', '{$view['updated']}', '{$view['updated']}', '', 0, 0, 'post', '', 0)");
}
}
初夏のJavaScript祭 in サーキュレーションビル ForPro