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)");
- }
- }