質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2339閲覧

Node.jsでtwiiter APIを叩いて日本語検索ができない

murasaki_0606

総合スコア12

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/11/16 05:20

JS+Node.jsによるWebクローラー/ネットエージェント開発テクニックという本を読み、Twitterからのデータ取得を試みましたが、日本語で検索をかけると全く取得できません。

以下、ソースになります。

javaScript

1var Twit = require('twit'); 2 3var count_kinoko = 0; 4var count_takenoko = 0; 5 6 7var T = new Twit({ 8 consumer_key: 'xxxxxxx', 9 consumer_secret: 'xxxxx', 10 access_token: 'xxxxxxx', 11 access_token_secret: 'xxxxxxxx' 12}); 13 14 15var kinoko = T.stream('statuses/filter', {track: 'きのこ'} ); 16var takenoko = T.stream('statuses/filter', {track: 'たけのこ'} ); 17 18kinoko.on('tweet', function(tw) { 19 var text =tw.text; 20 var user_name = tw.user.name; 21 console.log(user_name + "> " + text); 22 count_kinoko++; 23 console.log("count_kinoko: " + count_kinoko); 24}); 25 26takenoko.on('tweet', function(tw) { 27 var text =tw.text; 28 var user_name = tw.user.name; 29 console.log(user_name + "> " + text); 30 count_takenoko++; 31 console.log("count_takenoko: " + count_takenoko); 32});

本にある通り、今回は「twit」モジュールを利用しております。
きのことたけのツイート数を比較するプログラムです。単語を英数字にするとそれなりにリアルタイムで取得できてるようですが、何が問題なのでしょうか。

初歩的な質問ではありますが、よろしければアドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ご掲載のソースを元に自分でも動かしてみたものの、普通にきのこたけのこ取得できているので、おそらくですがソースコードをutf-8以外の形式で保存しているのではないでしょうか。

もしもそうでない場合、単に statuses/filter の日本語検索が馬鹿っぽく、私も試した範囲で「たけのこ[半角スペース] の里」だと反応するのに「たけのこの里」だと反応しないとかありました。
( この人も似たようなこと書いてます http://qiita.com/71713@github/items/6a58481b22ae364cb327

なので、以下のようにsearch/tweetsを一定時間ごとに叩くようにしてみてはいかがでしょうか。こっちだと想定通り(TwitterのWeb上のライブ検索と同じように)取れると思います。

js

1setTimeout( 2function(){ 3T.get('search/tweets', { q: 'たけのこ', count: 100 }, function(err, data, response) { 4 console.log(data) //data.idを見て二重カウントしたりしないようにする 5}) 6} 7, 10000);//10秒繰り返し

投稿2015/11/16 07:17

kohashi

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

murasaki_0606

2015/11/16 07:57

ご回答いただきありがとうございます! 上記のコードをsetTimeoutではなく、setInterval関数で定期的に呼びだすことで目標を達成しました。 さらに質問をさせていただきたいのですが、取得されたデータはdataオブジェクトの中に入ってるっぽいのですが、data.textなどでつぶやきだけ見ようとすると、undefindが返ってきます。 初歩的ではありますが、それぞれの必要な部分だけ習得したい場合の方法を教えていただければありがたいです。
kohashi

2015/11/16 08:08 編集

`data.statuses` の中に配列で入っています。 ``` data.statuses.forEach(function(tw){ console.log(tw.user.name + " > " + tw.text)}); ```
murasaki_0606

2015/11/16 08:14

ありがとうございます。 ほぼ希望通りの結果を得ることができました。 初歩的な質問にも関わらず、ご丁寧に回答していただきありがとうございました。 ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問