【C#】CoreTweet でプログラムからTwitter にツイートしてみる

CoreTweetというライブラリを使うとC#でbotが簡単に作れるらしいので使ってみました。
TwitterのAPIを利用するため、必要な手順やコードなどをまとめます。

【検証環境】Visual Studio2019 / .NET Core 3.1(コンソール)

利用準備

当たり前ですが、Twitter のアカウントが必要になります。
また、APIを利用するためのキーが必要になりますので、Twitterのデベロッパーサイトから利用申請をする必要があります。

APIキーの取得

Twitter Developers から利用申請を行います。

こちらのサイトがとても分かりやすく手順をまとめられていますので参考にさせて頂きました。英語オンリーのため挫けそうでしたが、なんとかなりました。
(※一点気になったのが、私の場合は申請後に送られるメールで本人確認が済んだら、ダッシュボードからすぐにAPIの利用ができました)

Access Token と Access Token Secret はダッシュボードからGenerateする必要があります。

以上で、ツイートに必要な下記情報が揃います。

  • Consumer Key
  • Consumer Key Secret
  • Access Token
  • Access Token Secret

パーミッションの設定変更

デフォルトではRead Onlyになっているため、Read and Writeに変更します。

これを行わなかったら下記の様なエラーが発生しました。

CoreTweet の使い方

まずはパッケージをインストールします。

PM> Install-Package CoreTweet

共通に使う下記クラスを作成します。
キーの値は環境に合わせてください。

public class Twitter
{
    private string consumerKey { get; set; }
    private string consumerKeySecret { get; set; }
    private string accessToken { get; set; }
    private string accessTokenSecret { get; set; }
    private Tokens Token { get; set; }

    public Twitter()
    {
        SetKey();
        Createoken();
    }

    private void SetKey()
    {
        //環境に合わせてください。
        consumerKey = "";
        consumerKeySecret = "";
        accessToken = "";
        accessTokenSecret = "";
    }
    private void Createoken()
    {
        //トークンの生成
        Token = CoreTweet.Tokens.Create(consumerKey
                                      , consumerKeySecret
                                      , accessToken
                                      , accessTokenSecret);
    }
}

ツイート

Twitterクラスに下記メソッドを追加します。

public void Tweet(string text)
{
    //ツイート
    Token.Statuses.Update(new
    {
        status = text
    });
}

そして下記のように使います。

static void Main(string[] args)
{
   var tweet = new Twitter();
   tweet.Tweet("hello twitter");
}

Twitterで確認するとツイートされていることが確認できました!

画像付きツイート

ツイートに画像を添付する場合は、あらかじめTwitterに画像をアップロードする必要があります。
UploadImageメソッドで画像をアップロードし、戻り値を下記Tweetメソッドに渡すことで可能になります。

public long UploadImage(string path)
{
    //media 引数には FileInfo, Stream, IEnumerable<byte> が指定できます。
    //また media_data 引数に画像を BASE64 でエンコードした文字列を指定することができます。
    MediaUploadResult upload_result = Token.Media.Upload(media: new FileInfo(path));
    return upload_result.MediaId;
}

public void Tweet(string text, long mediaID)
{
    Token.Statuses.Update(new
    {
        status = text,
        media_ids = new long[] { mediaID }
    });
}

ツイート・ユーザ情報の検索

ツイート内容やユーザ名をキーワードで検索したい場合は、下記のように行います。

public void SearchTweet(int cnt, string keyword)
{
    var tweets = Token.Search.Tweets(count => cnt, q => keyword);
    foreach (var tweet in tweets)
    {
        Console.WriteLine($"ユーザID:{tweet.User.ScreenName}");
        Console.WriteLine($"ユーザ名:{tweet.User.Name}");
        Console.WriteLine($"ツイート:{tweet.Text}n");
    }
}

public void SearchUser(int cnt, string keyword)
{
    var users = Token.Users.Search(count => cnt, q => keyword);

    foreach (var user in users)
    {
        Console.WriteLine($"ユーザID:{user.ScreenName}");
        Console.WriteLine($"ユーザ名:{user.Name}");
        Console.WriteLine($"自己紹介:{user.Description}n");
    }
}

フォロー

フォローは下記のように行います。
screen_nameは@から始まるidのことです。上記のツイートやユーザ情報の検索結果から取得することが可能です。

public void Follow(string screenName)
{
   Token.Friendships.Create(screen_name => screenName);
}

リプライ

リプライは下記のように行います。
【@screen_name】 は(@ + リプライ先のツイートのユーザ名)になります。
tweetIdは 上記のツイート情報の検索結果から取得することが可能です。

public void Replay(string text, long tweetId)
{
    var reply_text = "【@screen_name】" + 'n';
    reply_text += text;

    Token.Statuses.Update(status: reply_text, in_reply_to_status_id: tweetId);
}

Leave a Reply

Your email address will not be published. Required fields are marked *