2010年11月 2日

Flashでtwitterから低負荷でアイコンを取得する方法(東京てら子発表資料)

10/31の東京てら子で、発表してきました。
資料公開すると約束してたので、公開します。

本当はパワポをそのまま上げようと思っていたんですが、資料は2部構成でみんな興味があるのは後半っぽかったので、後半を抜き出した上で、色々スペルミスとか口頭で説明した内容を追加して、Blog記事として載せることにしました。

文章はパワーポイントからのコピペと、画像と入り混じってますがご容赦を


twitter関連のFlashコンテンツを作る機会が増えてますが、CGI作る手間もかかるし、ユーザーが離脱する可能性が出てくるので、できればOAuthしたくないところです。

でも、twitterからアイコンを取得するのって
意外と面倒なんですよね。

・API制限が・・・

1時間に50回くらい? 同一IPからのアクセスで制限

search.twitter.comに限っては
150回くらい?らしい。
→後で重要になります。覚えておいてください。

・サーバー負荷が・・・

twitterサービスは瞬間風速がハンパない
DotWarはピーク17万/日アクセス

・crossdomain.xmlが・・・

<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=
"http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="twitter.com" />
<allow-access-from domain="api.twitter.com" />
<allow-access-from domain="search.twitter.com" />
<allow-access-from domain="static.twitter.com" />
<site-control permitted-cross-domain-policies="master-only"/>
<allow-http-request-headers-from domain="*.twitter.com"
headers="*" secure="true"/>
</cross-domain-policy>

twitter.comも、api.twitter.comも外部から許可してない。
(apiくらい、してくれたらいいのに・・・)


ただし、外部向けにアイコンを提供してくれる
a0.twimg.com?a5.twimg.comは

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy
SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

つまり、画像のURLさえわかってしまえば直接取得できる。
(実際にはDotWarではキャッシュを取るために1度CGIを経由しているが)

以上の問題を踏まえて、
画像URLを取得する3つの候補

1つずつ紹介します

利点

  • 10行くらいでできるし、Flash側もめんどくない
  • 一番確実に取得可能

欠点

  • 使い方によっては、サーバーが負荷で死ぬ
  • API回数制限に引っかかりやすい(同じサーバーからアクセスが飛ぶので、同一IP扱いになる)

利点

  • CGIよりもAPI制限が甘い(各人が別のIPとしてカウントされる)
  • jQueryとかでそこそこ楽に実装可能

欠点

  • ちょっとFlashとの連携が面倒
  • エラーとか取りにくい
  • 1人が多数アクセスするとAPI制限に引っかかる

利点

  • API制限がさらに甘い(各人が別のIPとしてカウントされる+制限数が多い)
  • URLLoaderで簡単実装。JSもphpも必要なし

欠点

  • 取得が不安定
  • なぜかまったく表示されないユーザーがいる
  • 取得データは発言データと正確には一致しない
  • パブリックタイムラインは取れない  (誰か取る方法知ってる?)

どれも欠点がある

じゃあどうする?

負荷が低い方法から使う
取得できなかったら次の方法を試す。
それぞれの取得方法は、アクセス先が違うので負荷の分散にもなる。

実装は面倒くさいが、効果は高いはず

DotWarでは、この複合取得で運用 その結果・・・

やっぱ落ちました・・・。

とはいえ、

落ちたといっても、503が数回のみ。
アクセス数のわりには、頑張れたほうなのではないでしょうか。

以上、参考にしてください。


資料は以上ですが、実は当日考えていたネタで、時間の都合上削ったものがあります。
それは、search.twitter.comの応用利用についてです。

DotWarの入力フィールドの横には、randomというボタンがついていますが、
実はこれ完全なランダム入力ボタンではありません。
友人が出やすくなるように調節されています。

この友人というのは、フォロワーではありません。
そもそも、フォロワー≠友人ではないですよね、有名人とかだったり。
twitterのマーケティングを成功させるには、有名人ではなく、気軽に会話するような相手が入力されることが望ましいわけです。
そこで、「@ユーザー名」で検索した内容から、ヒットしたユーザーを抽出して使っています。
つまり、最近会話したことのある相手、ということになります。

この仕組みはシングルモードのステージ構成にも使われていて、特に最初とラスボスが友人になるように仕組まれています。
「最後が○○さんだった!」というツイートもちらほらあり、してやったりという感じでした。

当日別の発表でもちらほら、search.twitter.comの使い方について発表がありました。
(資料が出るかどうかはわかりませんが)
結構応用が利くので、色々試してみると面白いと思います。

トラックバックURL

このエントリーのトラックバックURL:
http://sipo.jp/mt/mt-tb.cgi/23

コメント[2]

アイコン取得部分のソースコード公開とかは予定ありませんか?JSでの実装がよくわからないのですが……

このページなんかどうでしょうか
http://blog.suz-lab.com/2010/03/jqueryjsonptwitter.html

コメントする