wdpress のサンプルソース確認

とりあえず GPS + Maps + twitter4j なナニから見てみる。
twitter4j な使い方にフォーカスして色々見てみる事に。以下でアタリを付けてみました。

$ find . -name "*.java"|xargs grep import|grep twitter4j
./location/LocationMessage.java:import twitter4j.Tweet;
./LocationActivity.java:import twitter4j.Status;
./LocationActivity.java:import twitter4j.Tweet;
./LocationActivity.java:import twitter4j.Twitter;
./LocationActivity.java:import twitter4j.TwitterException;
./LocationActivity.java:import twitter4j.TwitterFactory;
./LocationActivity.java:import twitter4j.http.AccessToken;
./overlay/TweetOverlayItem.java:import twitter4j.Tweet;
./TwitLalo.java:import twitter4j.AsyncTwitter;
./TwitLalo.java:import twitter4j.AsyncTwitterFactory;
./TwitLalo.java:import twitter4j.GeoLocation;
./TwitLalo.java:import twitter4j.Query;
./TwitLalo.java:import twitter4j.QueryResult;
./TwitLalo.java:import twitter4j.Status;
./TwitLalo.java:import twitter4j.Tweet;
./TwitLalo.java:import twitter4j.TwitterAdapter;
./TwitLalo.java:import twitter4j.TwitterException;
./TwitLalo.java:import twitter4j.TwitterListener;
./TwitLalo.java:import twitter4j.TwitterMethod;
./TwitLalo.java:import twitter4j.http.AccessToken;
./util/TwitterToken.java:import twitter4j.http.AccessToken;
$

とりあえず、エントリポイントな TwitLalo クラスから見てみる事に。

TwitLalo

以下な属性があります。

    TwitterListener twitterListener;

TwitterListner は interface らしく、この変数に代入されているのはTwitterAdapter というクラスのオブジェクトになっている。

        this.twitterListener = new TwitterAdapter() {

javadoc によれば

A handy adapter of TwitterListener.

との事。匿名クラスの中で定義されているメソドは以下の四つ。中身をざっくり確認するに

  • updatedStatus
    • 投稿完了時に呼び出される callback な模様
  • retweetedStatus
    • RT な投稿完了時に呼び出される callback な模様
  • searched
    • 検索のレスポンス受信時に呼び出される callbakk な模様 (?
  • onExeption
    • 通信時に例外が発生した時の callback (?

このオブジェクトは非同期通信なオブジェクトに渡す模様。非同期通信時に発生するイベントなインターフェースが定義されているのか。
で、TwitterAdapter なオブジェクト生成した直後で以下な記述がある。

        // Twitter用処理
        if (TwitterToken.getToken() == null || TwitterToken.getTokenSecret() == null)
            showIdPass();
        else }
            AsyncTwitterFactory factory = new AsyncTwitterFactory(twitterListener);
            asyncTwitter = factory.getOAuthAuthorizedInstance(
                    new AccessToken(TwitterToken.getToken(), TwitterToken.getTokenSeqret()));
            try {
                ownLocationInfo.setUserId(asyncTwitter.getId());
                searchNearTweet();

いきなり掘削範疇が広がりました。

  • TwitterToken
    • これは org.siprop.android.util パケジの中身
  • AsyncTwitter
    • これは twitter4j の非同期通信なクラスのはず
  • AccessToken
    • これも twitter4j なクラスらしい
    • 認証トークンのやりとりを抽象化?
  • LocationInfo
    • これは org.siprop.android.location パケジの中身

詳細は見ない方向で (を

searchNearTweet 手続き

定義が以下。

    public void searchNearTweet() {
        searchNearTweet(0);
    }
    public void searchNearTweet(long sinceId) {
        GeoPoint geoPoint = mapView.getMapCenter();

        try {
            Query query = new Query();
            query.setGeoCode(new GeoLocation(
                            geoPoint.getLatitudeE6() / 1E6,
                            geoPoint.getLongitudeE6() / 1E6),
                            SEARCH_DIST,
                            Query.KILOMETERS);
            query.setQuery(TWITLALO_HASH_TAG);
            if (sinceId != 0) query.sinceId(sinceId);
            this.asyncTwitter.search(query);

        } catch (IllegalStateException e) {
            Toast.makeText(this, "¶á¤¯¤Î\Ä\¤¡¼\Ȥθ¡º÷¤Ë¼ºÇÔ¤·¤Þ¤·¤¿", Toast.LENGTH_LONG).show();
        }
    }

ざっくりですが、座標と hashtag 渡して非同期な twitter 検索か。レスポンスが戻ってきたら AsyncTwitter#searched な手続きが呼び出される訳ですな。
searched な手続きで Overlay を云々している模様。このあたり掘ってくと面白いんですが、今日は元気に欠けておりまして、休ませて頂きます。