<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Twitter データを JMP データ テーブルにストリーミングする
ビデオだけが必要な場合は、最後までスクロールしてください。
この JSL の最小限のテストを、Mac と Win、JMP 11 および 12 で実行しました。このビデオでは、JMP の将来のバージョンの機能を利用していますが、それで止めないでください。あなたの経験についてここにコメントを追加してください。JSL は添付の ZIP ファイル内にあります。
この投稿では、軽く、多くのトピックに触れます。
- ツイッターアカウント
- ストリーミングデータ
- ビット操作
- JSON
- OAuth認可、署名
- カール
- 地図座標
概要: JSL をディレクトリに解凍します。Twitter アプリを作成し、キーを JSL ファイルにコピーします。(Windows) cURL のコピーを取得し、MAIN.jsl にパスを入力します。MAIN.jsl ファイルを実行します。
始める
Twitter アカウントが必要で、開始する前に Twitter 利用規約を読んで理解する必要があります。(ストリームで収集したデータはあなたのものではなく、使用方法には制限があります。何が良いか良くないかについてのアドバイスはしません。)
Twitter アカウントを使用して、 https://apps.twitter.com/新しいアプリケーションを作成します。これは携帯電話のようなアプリではありません。これは、プログラムが Twitter ストリームにアクセスできるようにするキーのセットです。そのプログラムは携帯電話上のアプリかもしれないし、JSL かもしれないし、あるいは次のような Python プログラムかもしれません。 http://www.tweepy.org/提供します。(私は tweepy から始めて、その後 JSL の道を進みました。Tweepy または別の Python ベースのソリューションの方が、この JSL ソリューションよりも優れている可能性があります。)
「新規」をクリックして新しいアプリケーションを作成し、誰も使用していない名前を付け、説明を追加し、Web サイト名を入力して、コールバック URL を空白のままにします。Web サイト名を指定する必要がありますが、示唆されているように、プレースホルダーを使用できます。同意書を読み、「Twitter アプリケーションの作成」をクリックします。

タブのある画面が表示されました。 3 番目のタブ「キーとアクセス トークン」が目的のタブです。

上部には、必要なものの一部であるコンシューマ キーとコンシューマ シークレットが表示されます。コンシューマ キーとシークレットが必要になります。さあ、JMP プロジェクトを開始してください。いくつかのファイルがあるため、ディレクトリを作成し、JSL ファイルを解凍し、EncryptedKeys.JSL を編集して入力を開始します。
// apps.twitter.com を使用します新しいアプリケーションを作成します。ここにキーをコピーします。
ConsumerKey = "Pnb…LAZ";
ConsumerSecret = "AF4C…………………………qNvXp";
下部にある [アクセス トークンの作成] ボタンをクリックして、最後の 2 つの値を取得します。

それらをコピーします...アクセス トークンはすべてハイフン付きの 1 行にあります...
accessToken = "3…………………………-……………………………………午前";
accessTokenSecret = "rc……………………HJ";
EncryptedKeys.JSL にはコメントを含めて 5 行あります。これは別のファイルにインクルードされます。 EncryptedKeys.JSL を保存するコンピュータのセキュリティを考慮する必要があります。キーのうち 2 つは公開されているとみなされますが、2 つは自分だけが知っておくべき秘密です。他の誰も公開鍵を必要としないため、公開鍵はすべて 1 か所に保管できます。
訪問https://apps.twitter.com/アプリが存在することを確認したら、twitter からログアウトできます。
ツイッターストリーミング
Twitter はサービスの他の利用方法を提供していますhttps://dev.twitter.com/特定のツイートを取得したり、新しいツイートを作成したりすることができますが、ストリーミングはフィルターを使用してリアルタイムのツイートを収集することです。Twitter が適用できるフィルタは、Twitter のコンピュータにとって効率的になるように設計されており、あなたが望んでいることとまったく同じことができない可能性があります (あなたが Twitter にいくら支払っているかを思い出してください)。最も興味深いクエリは、キーワードと地理的領域に関するものです。結果は、すべての検索語の和集合 (交差部分ではありません) になります。サンプルビデオでは、地理的な境界ボックスを使用せずに「朝食」、「昼食」、「夕食」を使用しました。世界中で、1 秒あたり約 3 件のツイートが取得されました。ロンドンの周囲の境界ボックスを使用して、検索をロンドンに絞り込むことはできません。これは、ロンドンからのすべてのツイートと、世界中の朝食、昼食、夕食を返そうとします。Twitter がどのくらいの量のデータをストリーミングするのかはまだ不明です。ある時点では、Twitter の速度が低下するのではないかと思いましたが、別の時点では、データを十分に高速に処理できない場合は Twitter がストリームを停止するのではないかと考えました。おそらく両方とも真実でしょう。前回の実験では、「ローリー」を選択し、ノースカロライナ州ローリーの周囲に境界ボックスを配置しました。世界中で盗まれたローリー自転車に関するツイートが届きました。
注意
キャプチャ後のフィルタリングを独自に行う必要があり、嫌いな単語の独自のリストを作成することもできます。無修正ツイートのリストを公の場で公開すると、恥ずかしい思いをするか、さらに悪いことになるでしょう。また、Twitter にはデータの提示方法に関するルールがあることにも注意してください。
地理的な選択
この JSL のスニペットは、クエリ用語と地理的位置を選択します。コードが複雑になってきたため、名前空間を使用し始めました。
include(“PICK.jsl”);
Pick:trackParm = "ランチ、ディナー、朝食"; // デフォルトのクエリ
ピック:ピック(); // クエリを調整するための GUI

[四角形の追加] ボタンをクリックすると、2 つの四角形が追加されました。PICK 名前空間の値は、後で twitter クエリを構築するために使用されます。少量の「and」機能があります。昼食を食べる、夕食を食べる、朝食を食べるを使用して、「食べる」と食事の両方を含むツイートを選択できます。ただし、ほとんどの場合、すべてが OR (結合) されます。
さらに含まれるもの
include("JSON.jsl"); // ツイートを解析するための Xan の JSON ライブラリのサブセット
include("BITS.jsl"); // ビット操作のコード
include("AUTH.jsl"); // OAuth のコード
include("SIGN.jsl"); // 署名用のコード
include("PARM.jsl"); //curl の http パラメータを構築するコード
これらには、大量の JSL をロードし、いくつかの小さな健全性チェックと自己テストを実行することが含まれます。BITS では、後でより高速なコードを作成するために一部のデータ構造を初期化するのに 1 分かかります。+++ がログ ウィンドウに出力するまでしばらくお待ちください。JSON はから取得されますザンが以前にやった仕事; Twitter ストリームは JSON 形式で送信されます。AUTH と SIGN には、EncryptedKeys を使用して Twitter への認証 (「ログオン」) を行う JSL が含まれています。これは複雑で、コンピュータにすでにインストールされている外部プログラムを使用して SHA1 ハッシュを実行します。ビット関数を書いたとき、SHA1 ハッシュを実装する必要があると思いましたが、これも複雑なので、デバッグの必要がないものを使用するのが便利です。最後のインクルード PARM は、cURL の文字列を構築します。
カール
cURL のコピーが必要になります。すでに MAC 上に存在します。Windows ユーザーは次のサイトから入手できます。 http://curl.haxx.se/システムを確認した後、まず担当者に連絡してください。https://en.wikipedia.org/wiki/CURLは、cURL に関する質問の出発点です。私がダウンロードしましたWin64 x86_64 CAB 。(お使いのコンピューターは IA64 ではなく I386 です)。 curl.exe をデスクトップにドラッグ アンド ドロップし、JMP がその場所を認識していることを確認します (RunProgram は $DESKTOP を展開しません。完全な答えを入力してください)。
cURLlocation="C:\Users\User\Desktop\curl.exe";
cURL は、JMP が RunProgram 関数を通じてアクセスできるコマンド ライン ユーティリティです。cURL プログラムは Twitter に接続し、ツイートのストリームを JMP にフィードバックします。
RunProgram(実行可能ファイル( cURLlocation )、オプション( cURLparms )、
readFunction(関数( {this},
buftxt ||= this << read( blob );
プロセス();
If( this << isReadEOF,
Write( Right( Char( buftxt ), 100 ) ) );))
cURLparms と process() 関数 (上で使用) について説明するのはこれだけです。
cURLparms の由来PARM:curlParm(PICK:trackParm、PICK:locationParm );これは、PICK (かなり上) を使用して、どの用語を追跡するか、どの場所を追跡するかを決定します。PARM 名前空間のcurlParm 関数は、consumerKey...applicationTokenSecret 変数 (上記) を使用して、特定の条件と場所に対する署名/承認を行います。
process 関数は buftxt からデータを取得し、それをデータ テーブルに置きます。
走る
終わり!添付ファイルを EncryptedKeys.JSL と同じディレクトリに置き、main.jsl を開いて実行します。ダイアログが開きます。 (最初に [OK] を押すだけです...マップ ポイントを表示する検索を使用します...) いくつかの検索語または小さな場所、あるいはその両方を設定します。
JSL の最後には、RunProgram が予期せず停止したときに再起動するループが表示されます。スクリプトで問題が発生した場合に Twitter サイトの悪用を防ぐために、60 秒間遅延します。インターネット接続は数日間稼働し続けることもあれば、1 時間に数回失敗することもあります。Twitter がさまざまな理由で接続を停止する可能性もあります。for ループも、少数回の再起動のみに制限されています。
スクリプトはほとんどテストされていません。うまくいかない場合は質問してください、ありがとう!
2 番目のデータ テーブルとマップは、開始ダイアログのデフォルトの朝食/昼食/夕食の値に依存します。朝食/昼食/夕食のツイートを検索するハードコードされた JSL がいくつかあります。作り直すことも、完全に切り取ることもできます。
マップの下部にある STOP ボタンを使用すると、(おそらく) スクリプトが正常に停止します。将来のリリースで MAC 上の JMP が正常に停止できない可能性があるバグを修正しました。 JMP 11 または 12 では強制終了が必要になる場合があります。
プレゼンテーション(データテーブルからビデオを作成)
朝食、昼食、夕食のツイートをしばらくキャプチャすると、ビデオを作成するのに十分なデータが得られます。最近のいくつかの投稿からのアイデアを使用して…より適切な色分け基準が必要な場合は、一日の始まりに緑、一日の終わりに赤、昼食時に青を使用します。行をサブセット化して、位置データを含む行のみを保持します。数式を使用して、座標または placeBounding_boxCoowned の中心から xLon 列と yLat 列を作成しました。

座標が利用できない場合、式は値を欠損に設定します。ツイートの約 5% だけが座標を持っています。
この列の式はツイートを分類するための列を作成しましたが、それでも言語ごとに異なります。

カテゴリを結合するには、次の列式を続けます。

ビデオ フレームの生成を高速化するには、サブセット化されたデータを行列に読み込みます。
dt = open("$desktop/sha1/TwitterFeed3.jmp");
xLonVec=dt:xLon<
yLatVec=dt:yLat<
kindVec = dt:kindCode<
timeVec = dt:dateUTC<
閉じる(dt,nosave);
フレームを生成する GraphBox を作成します。
New Window( "Meal Tweets", // グラフのマーカー サイズは赤/緑/青のツイートの位置に使用されます
g = グラフ ボックス( フレーム サイズ( 1920, 900 ), <<背景マップ( 画像( "詳細な地球", 透明度( 1 ) ), 境界( "世界" ) ) , <<マーカーサイズ(6))
);
軸を設定し、マップを追加するための JSL がさらにあります。ほとんどの作業は、データ テーブルからロードされた行列を処理する次のグラフィック スクリプトで行われます。
g[framebox( 1 )] << addGraphicsScript(
透明度(.8);
for(idx=lowIndex,idx<=highIndex,idx++,
Marker( Color State( match(kindVec[idx],1,"green",2,"blue",3,"red") ),{xLonVec[idx], yLatVec[idx]} );
)
);
そして、異なる開始時間と終了時間でマップを再描画し、画像をキャプチャするドライバー コード:
nframes = 秒*30;// 30fps で秒
開始 = 分(時間Vec);
終了 = max(timeVec);
期間 = 終了 - 開始;
デルタ = 期間 / nframes;
For( iframe = 0、iframe < nframes、iframe++、
mindate = 開始 + (iframe - 0) * デルタ - 2*3600; // 2 時間前に戻ります。
maxdate = 開始 + (iframe + 1) * デルタ + 3600; // 1時間進める
lowIndex=floor(interpolate(mindate,timeVec,1::nrows(timeVec)));
highIndex=floor(interpolate(maxdate,timeVec,1::nrows(timeVec)));
g<<再表示;
待機( 1 );
g[framebox(1)]<
);
最終的には、ビデオを作成するためのフレームが得られます。この 5 分間のビデオを作成するには、Blender (学習には長い時間がかかりますが強力です) を使用しました。このビデオには、米国の感謝祭を含む 16 日間で 377,765 件のツイートがありました。ツイートは合計 8,187,114 件ありましたが、そのほとんどには緯度と経度のデータが含まれていませんでした。これをもう一度行う場合は、収集されたデータをサブセット化します。 2.5GB のフルテーブルは大きいです。
https://www.youtube.com/watch?v=N20KsrmdgOU最大化してください!
取りつけの無い? ここをクリック投稿を見るには。