<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />TwitterデータをJMPデータテーブルにストリーミングする
ビデオが必要な場合は、最後までスクロールします。
MacとWin、JMP11と12でこのJSLの最小限のテストを行いました。このビデオは、JMPの将来のバージョンの機能を利用していますが、それで止められないようにしてください。ここにあなたの経験についてコメントを追加してください。JSLは添付のZIPファイルにあります。
この投稿は、軽く、たくさんのトピックに触れています。
- Twitterアカウント
- ストリーミングデータ
- ビット操作
- 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…………………………-………………………………………………am";
accessTokenSecret="rc………………………HJ";
EncryptedKeys.JSLには、コメントを含めて5行あります。別のファイルに含まれます。 EncryptedKeys.JSLを保存するコンピューターのセキュリティは、考慮する必要があります。キーのうち2つは公開されていると見なされますが、2つはあなただけが知っておくべき秘密です。他の誰も公開鍵を必要としないので、それらはすべて1つの場所にとどまることができます。
訪問https://apps.twitter.com/アプリが存在することを確認してから、Twitterからログアウトできます。
Twitterストリーミング
Twitterは、サービスを使用する他の方法を提供していますhttps://dev.twitter.com/特定のツイートを取得して新しいツイートを作成できますが、ストリーミングとは、フィルターを使用してリアルタイムのツイートを収集することです。Twitterが適用できるフィルターは、コンピューターにとって効率的であるように設計されており、希望どおりに機能しない場合があります(支払っている金額を覚えておいてください)。最も興味深いクエリは、キーワードと地理的領域に対するものです。結果は、すべての検索語の和集合(共通部分ではない)になります。サンプルビデオでは、地理的な境界ボックスなしで「朝食」、「昼食」、「夕食」を使用しました。世界中で、1秒あたり約3件のツイートを取得しました。ロンドン周辺のバウンディングボックスを使用して、検索をロンドンに絞り込むことはできません。これにより、ロンドンからのすべてのツイートと、世界中からの朝食、昼食、夕食が返されます。Twitterがストリーミングするデータの量についてはまだはっきりしていません。ある時点でTwitterは抑制されると思い、別の時点ではデータを十分に高速に処理できない場合はTwitterがストリームを停止すると思いました。多分両方とも本当です。以前の実験では、「ローリー」を選択し、ノースカロライナ州ローリーの周りにバウンディングボックスを配置しました。世界中で盗まれたローリー自転車についてのツイートを受け取りました。
注意
キャプチャ後のフィルタリングを独自に行う必要があります。また、気に入らない単語の独自のリストを作成することもできます。検閲されていないツイートのリストを公開すると、困惑したり、さらに悪いことになります。また、Twitterにはデータの表示方法に関するルールがあることを忘れないでください。
地理的選択
このJSLのスニペットは、クエリ用語と地理的な場所を選択します。コードが複雑になったため、名前空間を使い始めました。
include(“ PICK.jsl”);
PICK:trackParm = "ランチ、ディナー、朝食"; //デフォルトのクエリ
PICK:pick(); //クエリを調整するためのGUI

[長方形の追加]ボタンは、2つの長方形を追加しました。PICK名前空間の値は、後でTwitterクエリを作成するために使用されます。少量の「and」機能があります。昼食を食べる、夕食を食べる、朝食を食べるを使用して、「食べる」と食事の両方を含むツイートを選択できます。しかし、ほとんどすべてがORed(ユニオン)です。
その他の内容
include( "JSON.jsl"); //ツイートを解析するためのXanのJSONライブラリのサブセット
include( "BITS.jsl"); //ビット操作のコード
include( "AUTH.jsl"); //oauthのコード
include( "SIGN.jsl"); //署名用のコード
include( "PARM.jsl"); //curlのhttpパラメーターを構築するためのコード
これには、多数のJSLのロード、およびいくつかの小さな健全性チェックとセルフテストの実行が含まれます。BITSは、後でより高速なコードを作成するためにいくつかのデータ構造を初期化するのに1分かかります。+++がログウィンドウに出力されるまで、しばらくお待ちください。JSONはから取得されますXanが以前に行った作業; 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(executable(cURLlocation)、options(cURLparms)、
readFunction(Function({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変数(上記)を使用して、特定の用語と場所の署名/承認を行います。
プロセス関数はbuftxtからデータを取得し、それをデータテーブルに配置します。
走る
終わり!添付ファイルをEncryptedKeys.JSLと同じディレクトリに置き、main.jslを開いて実行します。ダイアログが開きます。 (最初に[OK]を押すだけです...マップポイントを表示する検索を使用するには...)いくつかの検索用語、または小さな場所、あるいはその両方を設定します。
JSLの最後に、RunProgramが予期せず停止したときに再起動するループが表示されます。スクリプトで問題が発生した場合にTwitterサイトを悪用するのを防ぐために、60秒間遅延します。インターネット接続は数日間稼働したままになるか、1時間に数回失敗する可能性があります。Twitterがさまざまな理由で接続を停止する可能性もあります。forループは、数回だけ再起動するように制限されています。
スクリプトはほとんどテストされていません。それが機能しないかどうか尋ねてください、ありがとう!
2番目のデータテーブルとマップは、オープニングダイアログのデフォルトの朝食/昼食/夕食の値によって異なります。朝食/昼食/夕食のツイートを探しているハードコードされたJSLがいくつかあります。あなたはそれを作り直すか、それを完全に切り取ることができます。
マップの下部にあるSTOPボタンは、(おそらく)スクリプトを正常に停止させます。将来のリリースでMAC上のJMPが正常に停止しない可能性があるバグを修正しました。 JMP11または12で強制終了する必要がある場合があります。
プレゼンテーション(データテーブルからビデオを作成)
朝食/昼食/夕食のツイートをしばらくキャプチャした後、ビデオを作成するのに十分なデータがあります。最近のいくつかの投稿からのアイデアを使用して…より良い色分け基準が必要な場合は、1日の始まりに緑、1日の終わりに赤、昼食時間に青を使用します。行をサブセット化して、位置データを含む行だけを保持します。数式を使用して、座標またはplaceBounding_boxCoordinatesの中心からxLon列とyLat列を作成しました。

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

カテゴリを組み合わせるには、次の列式が続きます。

ビデオフレームの生成を高速化するには、サブセット化されたデータをマトリックスにロードします。
dt = open( "$ desktop / sha1 / TwitterFeed3.jmp");
xLonVec = dt:xLon << getAsMatrix;
yLatVec = dt:yLat << getAsMatrix;
kindVec = dt:kindCode << getAsMatrix;
timeVec = dt:dateUTC << getAsMatrix;
close(dt、nosave);
GraphBoxを作成してフレームを作成します。
New Window( "Meal Tweet"、//グラフのマーカーサイズは、赤/緑/青のツイートの場所に使用されます
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での秒
start = min(timeVec);
end = max(timeVec);
期間=終了-開始;
デルタ=期間/nframes;
For(iframe = 0、iframe
mindate = start +(iframe-0)* delta-2 * 3600; //2時間戻ります。
maxdate = start +(iframe + 1)* delta + 3600; //1時間転送
lowIndex = floor(interpolate(mindate、timeVec、1 :: nrows(timeVec)));
highIndex = floor(interpolate(maxdate、timeVec、1 :: nrows(timeVec)));
g << reshow;
Wait(1);
g [framebox(1)] << savepicture( "$ temp / tweet" || right(char(iframe、6)、6、 "0")|| ".png"、 "png");
);
最終的には、ビデオを制作するためのフレームができあがります。私はBlender(長い学習曲線ですが強力です)を使用してこの5分間のビデオを作成しました。このビデオには、米国の感謝祭の休暇を含む16日間で377,765件のツイートがあります。全部で8,187,114のツイートがありましたが、ほとんどのツイートには緯度と経度のデータが含まれていませんでした。これを再度行う場合は、収集されたデータをサブセット化します。 2.5GBのフルテーブルは大きいです。
https://www.youtube.com/watch?v=N20KsrmdgOU最大化!
取りつけの無い? ここをクリック投稿を表示します。