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