ゲームエフェクトデザイナーのブログ (新)

レポート記事とかUE4のマテリアルとか。C#とかも触ったり。

C# Twitterアプリを作ってみる1

プログラム初心者がいきなりTwitterアプリを作ろうとすると思いのほか大変な印象でした。
例え任意の文字列を投稿するだけでも。。

なのでざっくりと備忘録としてメモっておきたいと思います。

大まかな流れ


① 開発者サイトへのアカウント登録

② 開発者サイトから「API Key」「API secret Key」などを入手

Visual StudioWindows Form Application の新規プロジェクトを作成

④ NuGet で Twitter APIC# で利用するライブラリ「CoreTweet」をインストール

ソースコードに以下のような処理を記述(方法はいくつもあるのでその一例)

 1. API Key を使ってTwitterアプリ連携認証ページへアクセス
  ※認証するとウェブ上にPINコードが表示される
 2. ダイアログボックスを表示するなどしてPINコードの入力を受け付ける
 3. 入力されたPINコードを使用してトークンを取得
  ※ここでようやくTwitterへの読み書きが可能に
 4. ツイートしたりタイムラインを表示したりと実行したい処理を書く

開発者サイトへのアカウント登録


Twitter公式のAPIを利用するには、まず公式の開発者サイトへの登録が必要なようです。
なんと面倒な。。

Twitter Developer Platform — Twitter Developers

理由はスパム投稿など不正アプリ防止のようで、登録したは良いもののアプリからのツイート数制限など色んな制限が設けられている模様‥

アカウント登録の際には全て英語で入力が必要で、それはGoogle翻訳で十分なのですが、どんなアプリを何のために作りたいかの説明を300字以上書かないと登録を完了できません。。

開発者サイトから「API Key」と「API secret Key」を入手


開発者サイトにログインしている状態だと右上にアカウント名が表示されますが、そのプルダウンメニューで「Apps」を選択、開いたページ先で「Detail(詳細)」ボタンを押す。

f:id:moko_03_25:20180916025605j:plain

f:id:moko_03_25:20180916025603j:plain

そしてジャンプ先のページ上部にある「Keys and tokens」タブを開くと「API Key」と「API secret Key」などの記載があるのでこちらをForm上で使用します。

f:id:moko_03_25:20180916025601j:plain

f:id:moko_03_25:20180916025559j:plain

最初どこに記載されているのか分からず探しました。。分かりにくい。。

「CoreTweet」をインストール


Twitter APIC# で利用するライブラリは色々あるみたいですが、ググってみた感じでは「CoreTweet」が最もポピュラーで良さそうな印象です。

こちらを NuGet で探してプロジェクトにインストールします。

具体的にコードを記述していく


ここは色んなサイトにそれぞれ色んな方法でサンプルが紹介されています。

最初はこちらのあたりを参考にしました。

C#でTwitterにつぶやく - プログラミング素人のはてなブログ

クイック チュートリアル · CoreTweet/CoreTweet Wiki · GitHub

C#でTwitterアプリを作る 第1回 OAuth - らこらこブログ

OAuth認証を利用しクライアントアプリケーション(デスクトップアプリケーション)から Twitterにつぶやきを投稿する (C#プログラミング)

.NET向けのTwitterライブラリ「CoreTweet」の使い方まとめ - 酢ろぐ!

認証ひとつとっても3種類くらい方法があるようで‥

とりあえずはPINを発行してそこからトークンを取得するというものを試してみました。

アプリ実行時には、例えばFormに配置したボタンをユーザーがクリックすると、ブラウザが自動で開いてTwitterアプリ連携認証ページを開き、「認証」ボタンを押した先で表示されるPINコードを入力して欲しい訳ですが、手っ取り早くテキスト入力欄があるダイアログボックスを開いて入力待機させようと思いました。

任意のURLをブラウザで開く


まず、指定のURLをブラウザで開かせるのは非常に簡単でした。

外部アプリケーションを起動する、ファイルを関連付けられたソフトで開く - .NET Tips (VB.NET,C#...)

こちらを参考にして‥

Process.Start(”アクセスするURL”.AbsoluteUri);


たったこれだけでいけるようです。

つまりアプリケーションに関連付けられたファイルを指定してやればそのアプリで開いてくれるように、URLを直接渡すだけでブラウザで開いてくれるんですね。便利!

ボタンクリックイベントでPINコードを取得する


PINコードを入手したは良いものの、それをダイアログボックスで入力してもらって取得したい訳ですが、どうも C# 標準のダイアログボックスにテキストボックス付きのものは無い様子。

そこで、Visual Basicの「InputBox」クラスを利用する方法を試してうまくいきました。

という訳で、起動する度にPINコードを入力する手順を踏む必要がありますが、こちらのような記述でとりあえずTwitterへの投稿ができました!

private void button1_Click(object sender, EventArgs e)
{
    // API Key と API secret Key を入力(ハードコーディング時は注意)
    var session = OAuth.Authorize("API Keyを入力", "API secret Keyを入力");

    // ブラウザでTwitterアプリ連携認証ページを開く
    Process.Start(session.AuthorizeUri.AbsoluteUri);

    // ダイアログボックスを表示
    var pincode = Microsoft.VisualBasic.Interaction.InputBox( "PINコード を入力してください", "title", "", -1, -1);

    // トークン取得
    var tokens = OAuth.GetTokens(session, pincode);

    // ツイートする
    tokens.Statuses.Update(status => "hogehoge");
}


やったー! 成功!

ちなみに API Key と API secret Key は誰にも知られてはいけないものなので、コード内に直接書く(ハードコーディングする)場合には注意が必要そうです。GitHubでバージョン管理していてうっかりPublicにしてしまったりとか、ありそう。。

こちらの記事内にも書かれていたのですが、セキュリティ対策のひとつとしてパスワードのようなものは環境変数に登録してソースコードで参照するような形にすると良いと。

なるほど‥!

そういう発想は全くありませんでした。。勉強になる。。

という訳で、とりあえず投稿までは上記の流れでいけたということで。

追記:この後、PIN取得を省略する形でツイートとタイムライン取得まで実装できました。
   その解説はこちら