Help us understand the problem. What is going on with this article?

node.jsのtwitterモジュールを使ってみた作業メモ (2)

More than 3 years have passed since last update.

注意: ここは作業メモ、大した情報は無いですょ。

他にも色々とためす

前回、

var twitter = require('twitter');

var client = new twitter({
    consumer_key:        '取得したconsumer key',
    consumer_secret:     '取得したconsumer secret',
    access_token_key:    '取得したtoken key',
    access_token_secret: '取得したtoken secret',
});

というコードを用意したので、その後に色々と追加して試してみます。

ツイートする

client.post('statuses/update',
        {status: 'Hello world (このツイートはテストです)'},
        function(error, tweet, response) {
        if (!error) {
            console.log(tweet)
        }
        })

これを実行しても、jsonでなんかベロベロと吐きだしますね。
まぁ、それはさておき、無事にツイートされている事を確認。

REST APIのマニュアルは ここ で。

なお、直後にフォロワーから core dumped とか返信されました。
やはり、テストは、てけとーなアカウントでした方がよろしいか……。

Streaming APIもためす

REST APIだけでなく、Streaming APIというのもあるんですね。
ひとまず、以下のようなコードを記述。

client.stream('statuses/filter',
          {track: 'Node.js'},
          function(stream) {

          stream.on('data', function(tweet) {
              console.log(tweet.text);
          });

          stream.on('error', function(error) {
              console.log(error);
          });
          }
         );

で、実行すると以下のように、Node.jsという文字列が含まれるツイートを表示していくようで。
Ctrl+cを押すまで実行止まらず。

$ nodejs ./twitter-test/twitter-test.js 
.@clevertech is looking for remote Driven JavaScript / Node.js Developer #nodejs #js #senior #support 📣 https://t.co/d3Laulx8Au
.@clevertech is looking for remote Driven JavaScript / Node.js Developer #nodejs #js #senior #support 📣 https://t.co/hx0x8RdgZz
Node.js vs Angular.js https://t.co/2EQnrGsC6X
That's certainly handy for us @nodejs folks https://t.co/O1FDCKvLTH
@Ingcarlosreina Hola Carlos, adjunto el error al querer instalar Gulp en consola CMD. instalé Node.js en Windows 8.1 https://t.co/b9UQgyaGgD
Refactoring a node.js application on a Friday afternoon. What could possibly go wrong?
RT @d3viant0ne: That's certainly handy for us @nodejs folks https://t.co/O1FDCKvLTH
RT @swissspidy: Refactoring a node.js application on a Friday afternoon. What could possibly go wrong?

そもそもStreaming APIとはなんぞや、REST APIと何が違うんだって件に関しては、
Streaming APIのマニュアルに書いてあるようで。
要は、REST APIはユーザのリクエストに逐一返事をするけど、
Streaming APIだとずっとコネクション貼ったまんまで結果を垂れ流すって感じでしょうか?

Socket.ioと組み合わせてみる

せっかくなので、Streaming APIで取得したデータを、
Socket.ioを使って動的に表示させてみました。
以下、コード。

twitter-test.js
var http = require('http');
var socketio = require('socket.io');
var twitter = require('twitter');
var fs = require('fs');

var twitter_client = new twitter({
    consumer_key:        '取得したconsumer key',
    consumer_secret:     '取得したconsumer secret',
    access_token_key:    '取得したtoken key',
    access_token_secret: '取得したtoken secret',
});

var http_server = new http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(fs.readFileSync('./index.html', 'utf-8'));
}).listen(13000);

var sio = socketio.listen(http_server);

sio.sockets.on('connection', function (socket) {

})

twitter_client.stream('statuses/filter',

              {track: 'linux'},

              function(stream) {

              stream.on('data', function(tweet) {
                  sio.sockets.emit('twitter_message', {'name': tweet.user.name, 'text': tweet.text})
                  console.log(tweet.user.name);
                  console.log(tweet.text);
                  console.log();
              });

              stream.on('error', function(error) {
                  console.log(error);
              });
              });

index.htmlも以下のように用意しました。
コードはかなり適当で、bootstrapも使いかたよくわからずに使っております。

index.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">

    <head>

    <title>Twitter test</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script type="text/javascript" src="/socket.io/socket.io.js"></script>

    </head>

    <body>

    <h1>Twitter test</h1>

    <hr />

    <div class="container">
          <div class="row">
            <div id="messageView">
        </div>
          </div>
    </div>

    <script type="text/javascript">

     var ioSocket = io.connect("http://localhost:13000");

     ioSocket.on("disconnect", function() {});

     ioSocket.on("twitter_message", function(data) {
         appendMessage(data.name, data.text)
     });

     function appendMessage(name, text) {
        $("#messageView").append(
              "<div class=\"panel panel-default\">" +
            "<div class=\"panel-heading\">" +
              "<h3 class=\"panel-title\">" + name + "</h3>" +
            "</div>" +
                "<div class=\"panel-body\">" +
                  text +
            "</div>" +
          "</div>");
     }

    </script>

    </body>

</html>

twitter-test.jsを実行した後、ブラウザで http://localhost:13000/ にアクセスすると、
以下のような画面で、次々とツイートが表示されていきました。
どうやら成功のようです。
無駄なコードやら、かなり筋の悪い事やってそうな気もするのですが、その辺りは追い追い馴れてく感じで。

twitter-test.jsの実行結果

と、ここまでやってみて、ほとんど同じような事をずいぶんと前にされてる先人がいらっしゃいました。
やはり、考えることはみんな一緒か……。
<Node.js + Socket.io + StreamingAPIでツイートを取得してWebサイトにリアルタイム描画する>

参考

rarewin
大阪在住、組み込みプログラマ。 普段はCやARMのアセンブラ書いて暮らしてます。 勉強しようかと思ってるもの: Python, Kotlin, Rust, Rails, Node.js
http://tirasweel.org/diary/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした