IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

Twitter で「はてなダイアラー」ときゃっふきゃっふしよう!

はじめに


はっ

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄

amachang です。
みなさん、こんにちはお元気ですか。僕は元気です。

もっと

もっと、熱くなれよおお、じゃなくて、もっとツイッターはてなダイアラーと絡みたい!

と言うわけで

ツイッターをやっているはてなダイアラーランキング Top 100 を作ってみた!

順位 はてな ID Twitter ID
1 id:finalvent @
2 id:amachang @
3 id:naoya @
4 id:shi3z @
5 id:kanose @
6 id:mkusunok @
7 id:Hamachiya2 @
8 id:nitoyon @
9 id:takerunba @
10 id:ululun @
11 id:y_arim @
12 id:tsumiyama @
13 id:gothedistance @
14 id:jkondo @
15 id:kokorosha @
16 id:keitaro2272 @
17 id:FUKAMACHI @
18 id:michikaifu @
19 id:rikuo @
20 id:heimin @
21 id:hejihogu @
22 id:gamella @
23 id:LM-7 @
24 id:elm200 @
25 id:yomoyomo @
26 id:pha @
27 id:LittleBoy @
28 id:rx7 @
29 id:zyesuta @
30 id:hrkt0115311 @
31 id:umeten @
32 id:TERRAZI @
33 id:heatwave_p2p @
34 id:sikii_j @
35 id:acqua_alta @
36 id:hyoshiok @
37 id:tanemori @
38 id:wadap @
39 id:nakakzs @
40 id:kiyo560808 @
41 id:love_chocolate @
42 id:moto_maka @
43 id:kawango @
44 id:chnpk @
45 id:hirose31 @
46 id:repon @
47 id:GiGir @
48 id:amatanoyo @
49 id:HolyGrail @
50 id:RPM @
51 id:kawasaki @
52 id:DocSeri @
53 id:reikon @
54 id:kusigahama @
55 id:Asmodeus-DB @
56 id:kaerudayo @
57 id:active_galactic @
58 id:nowokay @
59 id:ZIGOROu @
60 id:dacs @
61 id:hatayasan @
62 id:ryuka01 @
63 id:mamoruk @
64 id:white_cake @
65 id:orangestar @
66 id:mohri @
67 id:os0x @
68 id:adgt @
69 id:shinichiroinaba @
70 id:Baatarism @
71 id:stanaka @
72 id:Lhankor_Mhy @
73 id:kurimax @
74 id:Erlkonig @
75 id:coconutsfine @
76 id:t_yano @
77 id:fk_2000 @
78 id:masayang @
79 id:hakobe932 @
80 id:aerodynamik @
81 id:YUYUKOALA @
82 id:taan @
83 id:hagakurekakugo @
84 id:RyoAnna @
85 id:shimooka @
86 id:kousuke-i @
87 id:kskmeuk @
88 id:banraidou @
89 id:javascripter @
90 id:shibata616 @
91 id:tittea @
92 id:mellowmymind @
93 id:todesking @
94 id:kutabirehateko @
95 id:goldhead @
96 id:tkng @
97 id:kobeni_08 @
98 id:tt_clown @
99 id:ockeghem @
100 id:Yoshiori @

さらに

500 位までの人を以下のリストにまとめてみました
@amachang/hatena-top-500 on Twitter
けっこう、おもしろいタイムラインになっております!
じゃんじゃんフォローしちゃおう!きゃっふきゃっふしよう><

まとめ

こうやって見ると、みんなけっこうツイッターやってるんですね!
つんつくつん (σ・e・)σ(≧ェ≦;)
べ、べつに Twitter 記法を使ってみたかったわけじゃないんだからね!(///

おまけ「このリストの作り方」

最後にこのリストを作る方法を紹介します。

1. TopHatenar から「はてブ数」の多い「はてなダイアラー」を抽出する

まずは、 ブログランキングサイト [TopHatenar] から上から 5000 人のはてな ID を以下のプログラムを使って抽出してきます。

#! /usr/bin/perl

use strict;
use warnings;

use LWP::Simple;
use HTML::TreeBuilder::XPath;

sub get_rank_url {
    my $offset = shift;
    $offset += 1;
    return 'http://tophatenar.com/ranking/bookmark/' . $offset . '?blog=hatena';
}

sub get_tree {
    my $url = shift;
    my $tree = HTML::TreeBuilder::XPath->new;
    my $content = get($url);
    $tree->parse($content);
    $tree->eof();
}

sub main {
    for (my $i = 0; $i < 100; $i++) {
        my $url = get_rank_url($i * 50);
        my $tree = get_tree($url);
        my @nodes = $tree->findnodes('//table[contains(@class, "ranking")]//tr/td[2]/a');
        for my $node (@nodes) {
            print($node->as_text() . "\n");
        }
        warn($url . "\n");
        sleep(2)
    }
}

main();
2. 抽出した「はてなダイアラー」から id:furyu-tei さんが作った APITwitter ID を抽出する

はてなID ⇔ Twitterユーザー名の相互変換APIを作ってみました - 風柳メモ
この API は、 http://www.hatena.ne.jp/はてなID のページから Twitter にリンクされてる場合に Twitter ID を抽出できます。
ですので、この時点でだいぶ絞られることになりますね。
以下のプログラムは、 hatena_id と twitter_id の対を CSV 形式で出力します。

#! /usr/bin/perl

use strict;
use warnings;

use LWP::Simple;
use JSON::XS;

my $diary_id;
while ($diary_id = <>) {
    chomp($diary_id);
    my $content = get('http://hatena-anohito.appspot.com/c/?hatena_id=' . $diary_id);
    my $obj = decode_json($content);
    if (defined($obj->{twitter}->{screen_name})) {
        print($obj->{hatena}->{id} . ',' . $obj->{twitter}->{screen_name} . "\n");
    }
    warn('http://hatena-anohito.appspot.com/c/?hatena_id=' . $diary_id . "\n");
    sleep(2);
}
3. はてな記法の出力

以下のプログラムで、 はてな記法を出力します。

#! /usr/bin/perl

use strict;
use warnings;

my $rank = 1;
my $line;
while ($line = <>) {
    chomp($line);
    if ($line =~ m/^([a-zA-Z0-9_-]+),([a-zA-Z0-9_-]+)$/) {
        warn $line . "\n";
        my $diary_id = $1;
        my $twitter_id = $2;
        print('|' . $rank . '|id:' . $diary_id . '|twitter:@' . $twitter_id . "|\n");
    }
    else {
        die 'bad line';
    }
    $rank ++;
}
4. Twitter のリストに追加する

以下のプログラムで、 @amachang/hatena-top-500 on Twitter に Top 500 人を追加します。

#! /usr/bin/perl

use strict;
use warnings;

use Net::Twitter::Lite;

my $username = 'ゆーざーめい';
my $password = 'ぱすわーど';
my $listname = 'りすとめい';

my $twitter = Net::Twitter::Lite->new( username => $username, password => $password );

my $line;
my $count = 0;
while ($line = <>) {
    chomp($line);
    if ($line =~ m/^([a-zA-Z0-9_-]+),([a-zA-Z0-9_-]+)$/) {
        warn $line . "\n";
        my $user = $2;
        eval {
            $twitter->add_list_member($username, $listname, $user);
        };
    }
    else {
        die 'bad line';
    }
    $count++;
    unless ($count < 600) {
        last;
    }
}
5. あとは、ちょこっと文章書いて!

投稿するだけ!