ドコモ携帯電話でTumblrのDashboardが見れる「mblr(モブラー)」をPHPで書いた

mblr

ボクは通勤時間が1時間ちょいはかかるので、もっぱらモバツイとかでTwitterを見てヒマをつぶすんですが、前からTumblrも見たいなーと思っていたんです。で、ガラパゴスケータイであるドコモユーザーとしてはkuさんが作られたreblog.ido.nuというサービスが前から存在しているんですが、最近アクセスしたら何かPhotoポストしか表示されないっぽい。(ダメな携帯と言っているので流石に愛想を尽かしたのだろうw)

というわけで、昨日の夜2時間くらいコード書いたら、まあ見れるようになったのでそのままソースを公開してしまいます。ってか、Dashbord API叩いているだけなのでコア部分は30分くらいでできたけど、携帯での見た目を調整するだけで3倍の時間かかったorz。

ソースコード

<?php
/**
 * mblr (モブラー)
 * 携帯でTumblrするためのPHPスクリプトです。
 * 
 * ==API==
 * http://www.tumblr.com/api/dashboard?email={email}&password={password}$start={start}&num={num}
 * 
 * @author yager <yager at creazy.net>
 */
?>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style type="text/css"><!--body,p,blockquote{font-size:small;}--></style><title>mblr</title></head><body><h1>mblr</h1>
<?php
// api
$api_base = 'http://www.tumblr.com/api/dashboard';

// params
$email    = isset($_POST['email'])    ? $_POST['email'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
$start    = isset($_POST['start'])    ? $_POST['start'] : '0';
if ( preg_match('/^[0-9]+~[0-9]+$/',$start) ) {
    $start_end = explode('~',$start);
    $start     = $start_end[0]-1;
} else {
    $start = 0; $end = 10;
}

// ID/PWなし->ログイン
if ( empty($email) || empty($password) ) {
?>
<form action="" method="POST">
email:<input type="text" name="email" /><br />
password:<input type="text" name="password" /><br />
<input type="submit" value="ログイン" />
</form>
<?php
}
// ID/PWあり->ダッシュボード
else {
    echo '<span style="font-size:small;">'.($start?$start/10+1:1).'page</span><hr />';
    
    // Kick API
    $api = $api_base.'?email='.urlencode($email).'&password='.urlencode($password).'&num=10&start='.$start;
    $response = file_get_contents($api);
    $xml      = simplexml_load_string($response);
    
    // Format
    $i = 0;
    foreach ( $xml->posts->post as $post ) {
        $out = '';
        switch ($post->attributes()->type) {
            case 'link':
                $out
                    = '<div style="font-size:small;"><a href="'.$post->children()->{1}.'">'.$post->children()->{0}.'</a></div>'
                    . $post->children()->{2};
                break;
            case 'photo':
                $out
                    = '<a href="'.$post->children()->{3}.'"><img src="'.$post->children()->{6}.'" border="0" /></a><br />'
                    . $post->children()->{0};
                break;
            case 'video':
                $out
                    = '<div style="font-size:small;">[Video]'.$post->children()->{0}.'</div>';
                break;
            case 'audio':
                $out
                    = '<div style="font-size:small;">[Audio]'.$post->children()->{0}.'</div>';
                break;
            default: // regular, quote, conversation
                $out
                    = '<div style="font-size:small;">'.$post->children()->{0}.'</div>'
                    . $post->children()->{1};
        }
        $out .= '(via <a href="'.$post->attributes()->url.'">'.$post->attributes()->tumblelog.'</a>)';
        $out = str_replace('<p>','<div style="font-size:small;">',$out);
        $out = str_replace('</p>','</div>',$out);
        $out = str_replace('<blockquote>','<blockquote style="font-size:small;">',$out);
        echo $out."<hr />\n";
        if ( $i == 9 ) {
            break;
        } else {
            $i++;
        }
    }
?>
<form action="" method="POST" style="text-align:center;"><input type="hidden" name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" /><input type="hidden" name="password" value="<?php echo htmlspecialchars($password,ENT_QUOTES); ?>" />
<?php
    if ( $start > 0 )   echo '<input type="submit" name="start" value="'.($start-9).'~'.$start.'" />';
                        echo '<input type="submit" name="start" value="top" />';
    if ( $start < 250 ) echo '<input type="submit" name="start" value="'.($start+11).'~'.($start+20).'" />';
}
?>
</form></body></html>

↑のソースを適当な名前.phpで保存してPHPが動くサーバーにアップロードしてください。
SimpleXMLとか使っているのでPHP5以上でないと動かないです。

非常にシンプルなので100行足らずで済みました。ライブラリ依存もないです。

スクリーンショット

ログイン画面
設置したファイルにアクセスすると、ログインフォームが表示されます。
Tumblrのemail/passwordでログインしてください、

Dashboard
ダッシュボードはこんな感じ。携帯用なのでシンプルです。

Photoポスト
画像は100pxサイズで表示しています。リンク先は500pxサイズの画像にしてありますので、携帯ブラウザでもなんとか開けるかと。

ナビゲーション
1ページ10件表示していて、新しいページ、トップ、古いページへのボタンがあります。

注意事項

スクリプトの中身をみると分かりますが、入力されたemail/passwordはDBやファイルなどには保存していません。全ての画面でPOSTメソッドで引き回しています。これは、セキュリティ対策が面倒だったってのが大きいですが、遷移がフォームボタンになってしまってアクセスキーが効かないとか不便な制限が発生してしまっているので、今後どうにかしようかな。

あと、期待されていたら申し訳ありませんがreblogはできません。
とにかくダラダラ見るようにと思って作っていますので、そこまで考えていませんでした。リクエストによっては今後実装を考えます。

Docomo P905iでしか動作確認していません。
簡単に実装するために文字コードはUTF-8だし、かなり適当なXHTMLでマークアップしていますが、結構新しめのFOMA機種なら大体うまく動くんじゃないかと思います。
auはUTF-8大丈夫なんでしたっけ?Softbankの人はおとなしくiPhone買いなさいw

このスクリプトを使用して発生するいかなる問題に対して、yagerは責任をとりません。自己責任でお願いします。

まとめ

いつも通り、自分が使いたいだけで作り始めているので色々省略しまくりですが、もし役立つようであればご利用ください。

また「簡単ログイン実装しろ」とか「reblogさせろ」とか色々足りない機能はあると思うのですが、リクエストが多い場合は頑張って対応する可能性もあるのでw、ご意見ご要望をお寄せ下さい。ここのコメント欄とか@yagerとかどこでもOKです。あ、携帯用ならこう作ったら良いよみたいなアドバイスを絶賛募集中です!

ちなみに、Tumblrアカウントはここでヒッソリやってます。
タンヤガー

同じカテゴリーの記事

このページの一番上に戻る
  • Facebook
  • Twitter
  • Tumblr
  • Instagram
  • miil