Rawlerを使ったデータ取得

Rawlerってなに?

僕が開発した、プログラミング言語もどきです。Webからのデータ取得に特化した言語です。宣言型で関数型なので、データ取得に関してはやりたいこと中心に書けます。プログラミングのコード自体は、Visual Studioで書くように設計されています。

使い方は、次に示す、クライアントツールから、ソースコードを実行するだけです。あいにくWindows専用です。

Rawlerの環境準備

rawler から、「ファイル名を指定して実行」を押してソフトをインストール。

インターネットエクスプローラー(IE)を使うと、一手間省けて楽に行えます。 危険だと警告が出ますが、構わず実行。

Rawler画像

RawlerToolの画面構成

RawlerTool画像

画面構成はこのようになっている。

ツイッターからのデータ取得

ツイッター検索

http://kiichi.azurewebsites.net/RawlerSample/twittersearch.txt URL入力のテキストボックにこのURLを入力してダウンロード(URLをコピーするといい)

twitter1

ここの検索語のところを自身の検索したい語に書き換える。 そして、「Run」ボタンを押すと実行される。

初めて実行するときは、Twitterの認証をしなくてはなりません。

ブラウザが立ち上がるので、ツイッターの認証をします。 認証後、数字が表示されるはずです。

PIN画像

その数字を立ち上がっているPINダイアログに入力しボタンを押します。 これは、一度だけで十分なはずです。

そうするとTwitterの検索からツイートの取得が行われます。

保存先について

このツイート検索から取得された結果は、「マイドキュメント」の「Rawler」フォルダの「twitter.tsv」に保存されています。 これは、スクリプトの

<SetWorkFolder SpecialFolder="MyDocuments" Folder="Rawler"></SetWorkFolder>

ここで、作業フォルダの指定。

<FileSave FileName="twitter.tsv">

ここで、保存先を指定してるためです。

そのため、これを書き換えると、データの保存先が変わります。

ある人のツイート取得

ツイッターからのデータを取得する方法です。

http://kiichi.azurewebsites.net/RawlerSample/tweet.txt ここのスクリプトをダウンロード。

<t:TweetUserTimeline ScreenName="kiichi54321" MaxCount="3500">

ここのScreenNameを欲しいTwitterUserのScreenNameにすると取得できます。

APIキーを取得

目的

現在の認証では、通常のTwitter認証を使っています。通常のTwitterアプリと同じであり、大量のデータを取ろうとすると、API制限に引っかかり、足かせになります。

そのため、TwitterAPIキーを取得し、若干制限がゆるめの方法を用いてデータを取得します。

手順

https://apps.twitter.com/

ツイッターにログインしている状態でここにアクセスします。

「Create New App」ボタンを押します。

テキトウに入力します。電話認証が必要みたいです。面倒ですね。

作成後、「Keys and AccessToken」から、アクセストークンを調べます。

アクセストークン

赤く囲ったところです。

 <t:SetTwitterApiKeys ConsumerKey="あなたのConsumerKey" ConsumerSecret="あなたのConsumerSecret" />

これを、「SetWorkFolder」の次に書いてください。そして、ここを先ほど調べたアクセストークンを入力してください。 これがTwiiterLoginより前にあるとき、これに基づき、AppOnly認証をします。

AppOnly認証は、Apiを打てる回数が増える代わりに、鍵アカウントの取得は不可能になります。鍵アカウントのデータも欲しい時は、初めに行った、通常の認証を使いましょう。

複数の検索語での検索

http://kiichi.azurewebsites.net/RawlerSample/twittersearch3.txt

これをRawlerでダウンロードして、 「SetTwitterApiKeys」に適切なAPIキーの入力と「SetTempVar」に検索語をカンマ区切りで入力してください。(全角のカンマはダメです。必ず半角にしてください)

そして、実行すると、複数の検索語についてツイッター検索が行われます。

これも「マイドキュメント」の「Rawler」フォルダに「twitter2.tsv」というファイルが生成されます。保存先の名前等を変えたいときは適宜替えてください。

また、今回からは、取得できる他のフィールドも書き込むようにしました。

<DataWriteJsonData FieldName="created_at"></DataWriteJsonData> <DataWriteJsonData FieldName="text"></DataWriteJsonData> <DataWriteJsonData FieldName="user.id"></DataWriteJsonData> <DataWriteJsonData FieldName="user.screen_name"></DataWriteJsonData> <DataWriteJsonData FieldName="user.profile_image_url"></DataWriteJsonData> <DataWriteJsonData FieldName="user.lang"></DataWriteJsonData> <DataWriteJsonData FieldName="id"></DataWriteJsonData>

ここです。これは、ツイッターAPIが返すJsonに対応しています。使うのはここらへんかなと思います。 特にいらないと思った列は、消してください。そうすると保存はされません。

複数の検索語での検索(無限ループ)

http://kiichi.azurewebsites.net/RawlerSample/twittersearch4.txt

このようにLoopで囲むと、無限ループとして、複数の検索語で、最新のものを取得することができます。 実際運用していないので、ほんとにどこまでうまくいくのかよくわかりませんね・・・。

止め方は、ソフト自体を落としてください。

あるアカウントのフォロワーのツイートを取得する。

昔、半沢直樹の公式アカウントをフォローしている人のつぶやきの分析をしましたが、これと同じことがこれでできます。

http://kiichi.azurewebsites.net/RawlerSample/twittersearch5.txt

同様に、APIKeyを入力してください。鍵アカウントを欲しいなら、消して通常の認証にします。

対象のツイッターのScreenNameを指定してください。初めは、僕のになっています(kiichi54321)

実行すると、マイドキュメントのTweetDataというフォルダに、入力したScreenNameに基づいたフォルダが作られ、そこにフォローされているアカウントのつぶやきを300個ずつ取得します。

はじめの設定では、最新の300ツイートを取得するようにしています。 この300という数は、中盤くらいにある、

<t:TweetUserTimeline ParentUserIdType="UsetId" SleepSecond="1.2" MaxCount="300">

ここの「MaxCount="300"」によって指定しています。最大限(制限上、おそらく3200件)を取りたい場合は、次のように、その記述を消します。

<t:TweetUserTimeline ParentUserIdType="UsetId" SleepSecond="1.2" >

この取得は長時間かかる可能性があるので、一度停止しても、続きから取得できるような仕組みになっています。 続きからの取得をしたくない場合は、ScreenNameのフォルダを消すか、フォルダの名前の変更、フォルダの移動をしてください。

FAQ

課題