2010/05/25
2010/05/24
2010/01/15
はてなハイクからTwitterへの移行
この期に及んで気づいたことがある。
はてなハイクはTwitterに負けた。
iPhone App Storeを眺めていてもTwitterクライアントは唸るほどあるのに、はてなハイクのそれは見たことがない。
そのため、Twitterへの移行を決意した。
ただ、これまでの財産(ハイク)を無駄にしたくはない…。
そこで、ハイク→ツイート ツールを作成することにする。
今回はクロスドメインなど面倒なことを考慮したくないので、サーバーサイドで作成する。
まず、ハイクを取得する。
ハイク 取得 モジュール
from google.appengine.api import urlfetch from django.utils import simplejson import urllib def readContents(user): if user == "": return "" url = "http://h.hatena.ne.jp/api/statuses/user_timeline/" + user + ".json?count=200" try: result = urlfetch.fetch(url) array = simplejson.loads(result.content) except: array = [0] array[0] = {"text": "not found user", "created_at": ""} return array
昨今は何でも便利だ。
・関数urlfetch.fetch(url)にて、変数urlに対するリクエストが行われる
・変数urlに対するリクエストのレスポンスに、変数userのハイクがjson形式で返る
以下がサンプル。
http://ochigames.appspot.com/tst_readhatenahaiku
次回はツイートを投稿するモジュールを作成する。 続き
2009/06/02
mixiアプリでFlash(2)
以前公開したガジェットのサンプルの不良を早速見つけました。
以前のサンプルでは、
プロフィールの取得と、
gadgets.util.registerOnLoadHandler(get_viewer_profile);
Flashの表示が、
gadgets.util.registerOnLoadHandler(show_flash);
非同期に行われていた。
そのため、プロフィールの取得が済む前に、先にFlashが読み込まれてしまうことがありえる。
この場合、Flash内では必要な変数(プロフィール)を取得できず困ったことに…
この事態を避けるため、プロフィールの取得がすんだ段階でFlashの表示を行うように、サンプルを改変しました。
sample.xml
<?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="use Social Data"> <Require feature="opensocial-0.8"/> <Require feature="flash"/> </ModulePrefs> <Content type="html"> <![CDATA[ <script type="text/javascript"> var viewer = new Object(); // globalで必要な変数を宣言 function get_viewer_profile() { var request = opensocial.newDataRequest(); request.add(request.newFetchPersonRequest( opensocial.IdSpec.PersonId.VIEWER), "viewer_data"); request.send(function (response) { var item = response.get("viewer_data"); if (item.hadError()) { // エラー処理。item.getError() で詳細情報を取得 return; } // 実行ユーザのプロフィールを参照 var person = item.getData(); viewer.name = person.getField(opensocial.Person.Field.ID); // ID viewer.name = person.getField(opensocial.Person.Field.NAME); // 名前 viewer.nickname = person.getField(opensocial.Person.Field.NICKNAME); // ニックネーム viewer.url = person.getField(opensocial.Person.Field.PROFILE_URL); // プロフィールURL viewer.icon = person.getField(opensocial.Person.Field.THUMBNAIL_URL); // アイコンURL viewer.address = person.getField(opensocial.Person.Field.ADDRESSES); // 住所 viewer.age = person.getField(opensocial.Person.Field.AGE); // 年齢 viewer.birthday = person.getField(opensocial.Person.Field.DATE_OF_BIRTH); // 誕生日 viewer.bloodtype = person.getField(mixi.PersonField.BLOOD_TYPE); // 血液型 // Flashの表示 gadgets.util.registerOnLoadHandler(show_flash); }); } gadgets.util.registerOnLoadHandler(get_viewer_profile); function show_flash() { gadgets.flash.embedFlash( "sample.swf", "externalContainer", "9.0.0", { width : 400, // 幅 height : 300, // 高さ quality : 'high', wmode : 'transparent', allowScriptAccess : 'always' // swfからのaccessを許可 } ); } function getMixiPerson(){ return viewer; // 必要な変数を返す } </script> <div id="externalContainer"></div> <script type="text/javascript"> </script> ]]> </Content> </Module>
続き
2009/06/01
mixiアプリでFlash
mixiアプリが開始して久しいですね。
以下は、mixiアプリでFlashを使うための備忘録です。
以下のガジェットをmixiアプリで登録するものとする。
sample.xml
<?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="use Social Data"> <Require feature="opensocial-0.8"/> <Require feature="flash"/> </ModulePrefs> <Content type="html"> <![CDATA[ <script type="text/javascript"> var viewer = new Object(); // globalで必要な変数を宣言 function get_viewer_profile() { var request = opensocial.newDataRequest(); request.add(request.newFetchPersonRequest( opensocial.IdSpec.PersonId.VIEWER), "viewer_data"); request.send(function (response) { var item = response.get("viewer_data"); if (item.hadError()) { // エラー処理。item.getError() で詳細情報を取得 return; } // 実行ユーザのプロフィールを参照 var person = item.getData(); viewer.name = person.getField(opensocial.Person.Field.ID); // ID viewer.name = person.getField(opensocial.Person.Field.NAME); // 名前 viewer.nickname = person.getField(opensocial.Person.Field.NICKNAME); // ニックネーム viewer.url = person.getField(opensocial.Person.Field.PROFILE_URL); // プロフィールURL viewer.icon = person.getField(opensocial.Person.Field.THUMBNAIL_URL); // アイコンURL viewer.address = person.getField(opensocial.Person.Field.ADDRESSES); // 住所 viewer.age = person.getField(opensocial.Person.Field.AGE); // 年齢 viewer.birthday = person.getField(opensocial.Person.Field.DATE_OF_BIRTH); // 誕生日 viewer.bloodtype = person.getField(mixi.PersonField.BLOOD_TYPE); // 血液型 }); } gadgets.util.registerOnLoadHandler(get_viewer_profile); function getMixiPerson(){ return viewer; // 必要な変数を返す } </script> <div id="externalContainer"></div> <script type="text/javascript"> function show_flash() { gadgets.flash.embedFlash( "sample.swf", "externalContainer", "9.0.0", { width : 400, // 幅 height : 300, // 高さ quality : 'high', wmode : 'transparent', allowScriptAccess : 'always' // swfからのaccessを許可 } ); } gadgets.util.registerOnLoadHandler(show_flash); </script> ]]> </Content> </Module>
上記のガジェット中のsample.swfは以下のソースをビルドしたものとする。
sample.fla
import flash.external.ExternalInterface; var mixiPerson = ExternalInterface.call("getMixiPerson"); // JavaScriptのgetMixiPerson関数を呼び出す
このとき変数mixiPersonにはmixi上でそのアプリを閲覧している人の情報が格納される。
あとはご自由に! 続き
登録:
投稿 (Atom)