Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

WebService 開発実績

ドコモ携帯電話で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アカウントはここでヒッソリやってます。
タンヤガー

-WebService, 開発実績

執筆者:

関連記事

「Gyazo on Twitter RSS」TwitterにGyazoを張り付けているPostをダラ見するpipes

またまた、サクッとPipes作りました。 ・Pipes: Gyazo on Twitter RSS Twitterに貼られているGyazo画像ってかなり個人的なものが多い気がするので、他人のデスクトッ …

no image

AmazonのアソシエイトID入りで一番短いURL

via: AmazonはTwitterで自由にアフィリエイトして良いとは言ってないっぽい [C!] の、続きっぽくなっちゃいますが、TwitterでアフィリエイトURLをツイートするときに一番問題なの …

no image

YouTube HD Suiteを更新しました(YouTubeの仕様変更対応2009/08/20)

【2010/08/02:追記】 YouTube HD Suite 公式ページができました。 YouTubeが大幅に仕様を変更したようで、YouTube HD Suiteが動かなくなってしまったので早速 …

no image

Gmailを固定ピッチの等幅フォント(MonoSpace)で表示する方法(新Gmail対応)

[追記:2009/03/04] GMailが内部HTMLを更新したようで、このエントリーで紹介したスクリプトは古くなりました。 最新版は下記エントリーで紹介していますのでご参考ください。 Gmailを …

「はてブ Fans Ranking」であなたのブログをたくさんブクマしてくれてる人を調べよう

ちょっと、思い付いてこんなの作ってみました。 指定したURL内ページをたくさんブックマークしている、はてなブックマークアカウントのランキングを表示してくれます。

スポンサードリンク

スポンサードリンク