ハッシュタグリアルタイム検索に関して考えてみる
Twitter4jで下記みたいな処理を書いてみていたんだけど
どうもハッシュタグにより検索しても最新情報がとれない
(自分が検索やりたかったハッシュタグだと10時間前のがとれたりとかorz*1
イケメン先生にも相談してみても、難か解決しないぞorz
うーん。なんだろう・・ハッシュタグ検索で 最新のタグがなぜか引っかからない・・何がおきているのかしら・・#twitter4j 使っても変わらないのでtwitter側の問題?
@kimukou2628 result_typeをrecentにしてみて! URL
@yusukey ここを参考にして記載してみましたが URL 駄目です。夜フクロウさんでも URL がハッシュタグ検索に引っかかりません><
2012-07-04 18:13:17 via YoruFukurou to @yusukey
@kimukou2628 あ、一週間以上前のはヒットしないです
https://twitter.com/yusukey/status/220446960811909120:twitter:detail:right
結論から言うと下記のような話
- 駄目な例*2
Date date = new Date(); String[] arr=null; Query q= new Query(); q.setQuery("%23twitter4j"); q.setResultType(q.RECENT); q.since(dfq.format(date)); q.until(dfq.format(date)); q.setLang("ja"); List<Tweet> list=twitter_main.m_twitter.search(q).getTweets(); for(Tweet tw:list){ String screen_name = tw.getFromUser();//twitter_id User user = m_twitter.showUser(screen_name);//呼びまくるとTwポイントが直ぐ枯渇する String user_name = user.getName();//ニックネーム String twMsg= tw.getText();//呟き Date date = tw.getCreatedAt();//発言日付 URL imageURL = user.getProfileImageURL();//アイコン画像
- 成功した例
HttpClient httpClient = new DefaultHttpClient(); String url = "http://otter.topsy.com/search.json?page=1&perpage=20&q=%23twitter4j&window=h"; StringBuilder uri = new StringBuilder(url); HttpGet request = new HttpGet(uri.toString()); HttpResponse httpResponse = null; try { httpResponse = httpClient.execute(request); } catch (Exception e) { Log.e(TAG,"doInBackground",e); return null; } int status = httpResponse.getStatusLine().getStatusCode(); if (HttpStatus.SC_OK == status) { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); httpResponse.getEntity().writeTo(outputStream); String data; data = outputStream.toString(); // JSONデータ JSONObject rootObject = new JSONObject(data); JSONObject itemsObject = rootObject.getJSONObject("response"); JSONArray list = itemsObject.getJSONArray("list"); int len_list = list==null ? 0:list.length(); for (int cnt = 0; cnt < len_list; cnt++) { JSONObject item = list.getJSONObject(cnt); String screen_name = item.getString("trackback_author_nick");//twitter_id String user_name = item.getString("trackback_author_name");//ニックネーム String twMsg= item.getString("content");//呟き Date date = new Date(Long.valueOf(item.getString("firstpost_date"))*1000);//発言日時 URL imageURL = new URL(item.getString("topsy_author_img")); //アイコン画像
結局別のサービスを使いましょうというお話でして*3
このサービスはアカウントとらないと
3000アクセスまでらしい*4
HttpClient httpClient = new DefaultHttpClient(); String url = "http://otter.topsy.com/credit.json"; StringBuilder uri = new StringBuilder(url); HttpGet request = new HttpGet(uri.toString()); HttpResponse httpResponse = null; try { httpResponse = httpClient.execute(request); } catch (Exception e) { LogUtil.error(TAG,"doInBackground",e); return false; } int status = httpResponse.getStatusLine().getStatusCode(); if (HttpStatus.SC_OK == status) { try { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); httpResponse.getEntity().writeTo(outputStream); String data; data = outputStream.toString(); // JSONデータ JSONObject rootObject = new JSONObject(data); JSONObject itemsObject = rootObject.getJSONObject("response"); String item = itemsObject.getString("remaining"); if(Integer.valueOf(item) > 0){ return true; } return false;
念のため、limitがきたらTwitter4jの検索の処理で呼ぶ形にはしておく。なかなか難しいですね><
追記)
http://otter.topsy.com/search.json? の結果は順不同でくるみたいなのでソートが必要でした
List<TopsyBean> tp_list = new ArrayList<TopsyBean>(); Collections.sort(tp_list, new TopsyBeanComparator());
なイメージ
その上でTwの呟きでリンク踏ませて実行させるような事をしたい場合は
さんがやられているような
- Androidのブラウザのリンクをクリックするとアプリを起動できるようにする - Androidはワンツーパンチ 三歩進んで二歩下がる
- 特定のURLをフックしてアプリを起動させる(暗黙的インテント) - tomstay's memo
対応が必要。
t.coの展開も必要なので
辺りの展開処理も必要ですね。。
色々とやる事は多いな。。。
追記2)
複数条件は、twitter4jのQueryと同じく
でOKらしい。今一引っかかっているかどうかは微妙だけど(twitter4jの方では動く事は確認
ワード1 OR ワード2
twitter4j のほうだと「-除外ワード」を設定可能。ただしハッシュタグと併用は出来ないみたい
//NG 検索ワード -%23ハッシュタグ
//OK
検索ワード -ハッシュタグ
追記3)
そこら辺も含めて、自分で即興で数時間程度でwebサービスを作ったことある(起こせる)人がほしい って話になるんだけどそんな人転がっているのかしら。もちろん TLにいらっしゃるような有名人なら可能なのだろうけど・・
追記4)
pageは動いてないようなので使わないほうがいいかも
今日はtw表示するところで 変な文字拾ってlistviewがruntime error吐いて固まったんだけど、textviewとかの禁止文字がわからない?(´▽`;)ゞ 何だろう?絵文字かな?
TextView で twの表示で落ちてたのは android:autoLink="web" の除去で解決したけど、リンク化する時点で落ちるのかな。。。(汗 文言によって落ちる落ちないって結構厳しいな。。。
EditText/TextViewに絵文字を入力&表示する - Qiita
なことはできるけど、
IOS=>PHP=>MySQLに入れるランキングとかでエラったりしてるので
あんま対応は微妙だな(汗 とかは思ったりも・・。
Html.fromHtml あたりで手動で処理すればいけるのかな??
結構悩ましい問題かも・・
でストック中だな。。。