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

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

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

前回の記事の続き。

とりあえずツイートとタイムラインの取得ができるというだけですが、形にはなったので初学者な方のために公開しておきたいと思います。

GitHubはこちら。
GitHubにも書いていますが、ソリューションを開いたらまずはNuGetでCoreTweetをインストールして、開発者サイトからAPI Key等を取得してコード内で参照するようにしてください。そうしないとエラーが出てビルドも実行ファイルの起動もできません

こちらのGIFアニメのような感じで文章のツイートと、自身のタイムラインのツイートを最新のものから任意の数だけ取得してTextBoxに表示します。
ページ数(引数 page)というのは、一度に取得する数(引数 count)を1ページとして、何ページ先のものを取得するかという指定のようです。でもあまり先のページは読み込めない様子。。

f:id:moko_03_25:20180917015151g:plain

ソースコードはこんな感じです。

using System;
using System.Windows.Forms;
using CoreTweet;    // 追加を忘れずに

namespace TwitterAppSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // トーク
        Tokens tokens;

        private void Form1_Load(object sender, EventArgs e)
        {
            // 認証
            tokens = Tokens.Create(
                "API keyを入力",
                "API secret keyを入力",
                "Access tokenを入力",
                "Access token secretを入力");
        }

        // ツイートボタン
        private async void Button_Tweet_Click(object sender, EventArgs e)
        {
            // TextBox内の文字列をツイートする
            Status _status = await tokens.Statuses.UpdateAsync
                (status => TextBox_Tweet.Text);
        }

        // TL読み込みボタン
        private void Button_TLLoad_Click(object sender, EventArgs e)
        {
            LoadTimeLine();
        }

        // TextBox に 自身のタイムラインを読み込む
        private void LoadTimeLine()
        {
            // 取得するツイート数
            long l1 = long.Parse(textBox_LoadNum.Text); // 一度に取得する数
            long l2 = long.Parse(textBox_LoadPage.Text); // ページ数

            // リプライを含めるかどうかチェックボックスの状態を取得
            bool rep = checkBox_IncrudeReply.Checked;

            // タイムラインを取得
            var tl = tokens.Statuses.UserTimeline(
                count => l1, page => l2, exclude_replies => rep);

            // TextBoxへの書き込み
            foreach (var value in tl)
            {
                TextBox_TL.AppendText(value.Text + "\r\n");
            }
        }
    }
}

 

アプリを起動するたびに認証させるのは面倒なので自動認証させたのですが、その際にはこちらの記述を参考にさせていただきました。

こんな感じで、開発者サイトで得られる4つのコードを与えてトークンを取得します。

private void Form1_Load(object sender, EventArgs e)
{
    var tokens = Tokens.Create(
        "API keyを入力",
        "API secret keyを入力", 
        "Access tokenを入力",
        "Access token secretを入力");
}


ただしこちらはコンソールアプリの例ですし、自身のアカウントのタイムラインを表示させたいのですが、そうするとこちらが参考になりました。

しかし認証はうまくいくのですが、ツイートと自身のタイムライン取得がうまくいきません。

「TextBlock」というWPFのコントロールが使用されてるようなのでTextBoxで代替してやってみましたが、ツイートでもタイムライン取得でもトークンがNullと判定されます。。

という訳で、上記サイトで得た情報をもとに他のサイトの解説も参考にしてなんとかうまくいきました。

タイムライン取得は「HomeTimeline」。
自身のタイムライン取得は「UserTimeline」。

その際の引数に関してはこちらで説明されているような感じです。

ただ、古いツイートの表示がまだうまくいっておらず、当初やりたかった1年以上前のツイートを表示してさくさく削除していくようなことがまだできていません。

そのあたりはまたぼちぼちと。。