2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[講座] Twitter Stream API を使って Azure でデータ分析 - Step1 (Sampled Stream V2 API)

Last updated at Posted at 2021-05-14

こんにちは。ドクです。
久しぶりに Twitter API を使って、データ分析をしてみようと思います。前回は、第二次安倍内閣が誕生する前の衆議院選挙時に、Twitter API を使いましたが、面白い傾向が見てとれました。かなり昔ですね。。。

#講座の最終目標
Twitter のツイート データを Azure Data Lake Storage Gen2 (ADLS Gen2) に Parquet 形式のファイルとして自動的に蓄積し、Azure Synapse Analytics (Serverless SQL / Apach Spark) を使って分析できるようにします。ツイート データの継続的な取得と ADLS Gen2 へのデータ蓄積には、Azure Functions を利用します。
image.png

#Step1 の目標
2021 年 5 月現在、プレビューである Twitter - Sampled Stream V2 API を C# から扱えるようにすることです。このステップでは、Azure は関係なく、ローカル環境に単純なコンソール アプリケーションを作成し、動作させます。

#Twitter API
Twitter の開発者向けプログラムを通して提供される API です。各 API では要求に対するレート制限が設定されており、Stream API の一般的な無償利用の場合、50 万ツイート/月の取得制限が入ります。今回は、Twitter 社によってサンプリングされたツイートをリアルタイムに受け取れる Sampled Stream V2 API を利用します。

#開発環境 (OSS)
開発には、以下を利用します。OSS (無償) かつ クロス プラットフォームとなりますので、Windows / Mac / Linux などお好きな OS/デバイスをご利用ください。

#Twitter API 環境の整備
##1. Twitter アカウントの作成
API 用の Twitter アカウントを作成します。携帯電話番号やメールアドレスなどを正しく登録してください。
image.png

##2. Twitter API の利用登録
###手順 (1)
Twitter Developer サイト の右上にある 「Apply」をクリックします。
image.png

###手順 (2)
以下ページの「Apply for a developer account」ボタンをクリックします。
image.png

###手順 (3)
ログイン後、開発者属性を選択します。個人による一般的な無償利用の場合、「Hobbyist」を選択します。
image.png

###手順 (4)
利用目的や利用内容を入力します。以下は、Stream API を利用する上で回答が必要な最低限の項目となります。英語での記述となりますが、最低文字数をクリアしていれば、通常は問題なく承認されます。
image.png
<<回答を入力します>>

image.png
<<回答を入力します>>

image.png
<<回答を入力します>>

###手順 (5)
登録/承認が上手く行くと、以下のような Developer ポータルの画面になります。登録中に API Key / API Secret が表示され、書き留めておく必要がありますが、書き留めておくのを忘れた場合、PROJECT APP の右側の鍵マークをクリックして、再生成 (Regenerate) することもできます。
image.png

###手順 (6)
手順 5 の画面の PROJECT APP の右側の鍵マークをクリックして、Authentication Token を作成しておく必要があります。アプリ認証 (V2 API) では API Key / API Secret / Bearer Token が必要で、ユーザー認証 (v1 API) では API Key / API Secret / Access Token / Access Token Secret が必要になりますので、すべて書き留めておいてください。
image.png

#Twitter API を呼び出す C# コードの開発
今回の手順では、Visual Studio 2019 を利用します。

##1. Visual Studio 新規プロジェクトの作成
Visual Studio 2019 を起動し、「新しいプロジェクトの作成」で「C# コンソール アプリケーション」を選択してください。「C# コンソール アプリケーション (.NET Framework)」は選択しないように注意してください。.NET Core および .NET 5 以降は、クロス プラットフォームの OSS ランタイムとなりますが、.NET Framework は Windows 専用の商用版ランタイムで、4.8.x が最終バージョンとなり、新規開発は行われないものとなります。
image.png

##2. Twitter API SDK 用 Nuget パッケージの取得
Visual Studio の「Nuget パッケージの管理」機能を使って、Twitter API 用の SDK (TweetinviAPI) を取得します。
image.png

##3. using ディレクティブの追加(コード)
Twitter API を扱うのに必要なライブラリ分を追加します。

using System;
using System.Threading.Tasks;
using Tweetinvi;

##4. 認証とストリームの作成(コード)
以下は、Sampled Stream V2 API を利用するのに必要なアプリ認証、および、ストリーム作成のコードとなります。事前に控えておいた API Key / API Secret / Bearer Token の値で、以下のパラメーターを置き換えてください。

var bearerToken = "<your Bearer Token>";
var client = new TwitterClient("<your API Key>", "<your API Secret>", bearerToken);
var stream = client.StreamsV2.CreateSampleStream();

##5. イベントハンドラーと処理内容の記述(コード)
以下は、ストリームからツイートを1件読み取る度に呼ばれる TweetReceived に処理内容を記述しています。args.Tweet.Lang を利用して、日本語のツイートだけを表示するようにします。

stream.TweetReceived += (sender, args) =>
{
    var lang = args.Tweet.Lang;
    if (lang.ToLower() == "ja")  // Display only Japanese tweets
    {
        Console.WriteLine($"** Text : {args.Tweet.Text}");
    }
    ++counter;
    if (counter >= maxCount)
    {
        stream.StopStream();
    }
};

##6. ストリーム読み取りの開始(コード)
以下は、ストリームの読み取り開始となります。ストリームは一度開始すると、レート制限などに掛からない限り終了しない為、手順 5 では StopStream() を使って、読み取り件数に応じてストリームを終了するようにしています。

await stream.StartAsync();

##7. コード全体
上記で主要なコードについて説明しましたが、以下はコード全体となります。GitHub にも各ステップのコードを共有しています。

Program.cs
using System;
using System.Threading.Tasks;
using Tweetinvi;

namespace TwitterStreamApiConsole
{
    class Program
    {
        private static readonly int maxCount = 100;
        private static int counter;

        static void Main(string[] args)
        {
            counter = 0;

            // Start Twitter Stream reading with Sampled Stream V2 API
            StartSampledStreamV2().Wait();

            Console.ReadLine();
        }

        /// <summary>
        /// Twitter Sampled Stream V2 API
        /// Nuget Package : Tweetinvi
        /// https://linvi.github.io/tweetinvi/dist/intro/basic-concepts.html#twitterclient
        /// </summary>
        private static async Task StartSampledStreamV2()
        {
            Console.WriteLine($"***** Stream started. {DateTime.UtcNow}");

            // Application client & stream
            var bearerToken = "<your Bearer Token>";
            var client = new TwitterClient("<your API Key>", "<your API Secret>", bearerToken);
            var stream = client.StreamsV2.CreateSampleStream();

            // Read stream
            stream.TweetReceived += (sender, args) =>
            {
                var lang = args.Tweet.Lang;
                if (lang.ToLower() == "ja")  // Display only Japanese tweets
                {
                    Console.WriteLine("----------------------------------------------------------------------");
                    Console.WriteLine($"** CreatedAt : {args.Tweet.CreatedAt}");
                    Console.WriteLine($"** Source    : {args.Tweet.Source}");
                    Console.WriteLine($"** Text      : {args.Tweet.Text}");
                }
                ++counter;
                if (counter >= maxCount)
                {
                    stream.StopStream();
                }
            };
            await stream.StartAsync();

            Console.WriteLine();
            Console.WriteLine($"***** Stream stopped. {DateTime.UtcNow} (counter : {counter})");
        }
    }
}

##8. デバッグ実行
デバッグ実行して、以下のようにツイートがリアルタイムに表示されれば、成功です。お疲れ様でした。
image.png

#次のステップへ
Step2 では、キーワードでストリームをフィルタリング可能な Filtered Stream (V1.1) API のコードを作成します。

#参照
C# 向け Twitter API SDK (TweetinviAPI) Nuget Package サイト
TweetinviAPI - Sampled Stream API リファレンス
クロス プラットフォーム .NET 概要
Twitter 開発者向けサイト
Twitter API サイト
Visual Studio 2019 Community サイト
Visual Studio Code のサイト

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?