m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

【Perl版】TwitterAPIでStremingAPIを使用してつぶやきをリストで抽出

今度はPerlでストリーミングを取得

cpanmモジュールであるらしいけどなんかうまく動かなかったので自力で取得
なんか調べる度に新しいcpanモジュールが出てきてキリが無くなった…

データの流れは同じはず

基本、php版と同じ流れでデータを渡せばイケるはず…

手順

ソース
#!/usr/bin/env perl

use strict;
use warnings;

use Net::OAuth;
use MIME::Base64;

use JSON;
use IO::Socket;
use IO::Socket::SSL;
use Data::Dumper;

use utf8;
binmode STDOUT => ':utf8';

# サイト情報
# my $url = 'https://userstream.twitter.com/1.1/user.json';
# my $site = 'userstream.twitter.com';
my $url = 'https://stream.twitter.com/1.1/statuses/sample.json';
my $site = 'stream.twitter.com';

# Auth情報を編集してヘッダーを取得
my $request = Net::OAuth->request('protected resource')->new(
    version          => '1.0',
    consumer_key     => "Application settingsのAPI key",
    consumer_secret  => "Application settingsのAPI secret",
    token            => "Your access tokenのAccess token",
    token_secret     => "Your access tokenのAccess token secret",
    request_method   => "GET",
    signature_method => 'HMAC-SHA1',
    timestamp        => time,
    nonce            => MIME::Base64::encode( time . $$ . rand ),
    request_url      => $url,
    (),
);

$request->sign;
my $auth = $request->to_authorization_header;



# SSLオープン
my $sock = IO::Socket::SSL->new( PeerAddr => $site . ':https' );

# パラメータ出力
my $req = "";
$req .= "GET $url HTTP/1.1\r\n";
$req .= "Host: $site\r\n";
$req .= "Authorization: $auth\r\n";
$req .= "\r\n";
$sock->print("$req");

# 
while ( my $l = $sock->getline ) {
	print $l;
}

# ここからツイート
while ( my $l = $sock->getline ) {
    print Dumper($l);
}

# 閉じる
if(defined $sock){
	close $sock;
}
結果

f:id:m_shige1979:20140410202042j:plain

参考

Net::Twitter::Stream
※直接ソース内を参照してデータの取得方法を拝借



データをうまく組み立てないと行けないみたいなんで大変かも…