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, 開発実績

執筆者:

関連記事

「AmaQuick」が価格取得を強化!Amazon価格表示についての注意事項まとめ

大きなデザイン変更を行い、Chrome拡張機能として復活したAmaQuickですが、その後も細かいアップデート対応を行っています。このブログで紹介していなかったのですが、v1.0.2では価格取得に対応 …

DNPのフォトブック「DreamPages」を試してみたよ

フォトブック・フォトアルバム・写真集の作成 | DreamPages Fans:Fansで無料お試しキャンペーンを募集していたので応募してみたら受かっちゃいました。ボクはもともと写真好きですが、デジカ …

EXIF情報を一覧表示するブックマークレット「EXIF EXISTS ?」を作りました

WEBページに表示されている画像のEXIF情報をザザーと一覧表示するブックマークレット(というかWEBサービス)「EXIF EXISTS ?」を作ってみました。 ・EXIF EXISTS ? | ある …

YouTube HD Suite を修正しました(2009-03-05)

[追記:2009/03/09] このエントリーで紹介したupdateの「パートナー動画」向けの修正によって、HD/MP4アイコン表示が正しく表示されない問題が発生します。申し訳ありませんが、パートナー …

Facebookにアップロードされた動画をダウンロードする方法

先日、Facebook10周年記念、過去3年間の自分を振り返る「LookBack」と早速動画ダウンロードの方法という記事でFacebook動画のダウンロード方法をちょっと調べたのですが、「LookBa …

スポンサードリンク

スポンサードリンク