C#

【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);
}

エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【フリーランス向け】安心保障と豊富な案件紹介 Midworks

Midworksは豊富な案件と「フリーランス」と「正社員」の良いとこ取りをした働き方を実現する手厚い保障が特徴です。

▼こんな方におすすめ
・現在正社員でフリーランスになろうか悩んでいる
・フリーランスとして働いているが、先行きが不安がある  (安定的な案件確保や保障など)
・自分の市場価値を知りたい、見合った案件で参画したい
・今後のキャリアビジョンを踏まえて案件を選びたい

【未経験向け】自宅で現役エンジニアから学べる TechAcademy

テックアカデミーは、現役エンジニアから学べるオンラインに特化したプログラミングスクールです。
講師は全員、通過率10%の選考に合格した現役エンジニア。
確かなスキルをもとに受講生をマンツーマンサポートします。


▼こんな方におすすめ
・自宅にいながらオンライン完結で勉強できる
・受講生に1人ずつ現役エンジニアのパーソナルメンターが専属でつく
・チャットで質問すればすぐに回答が返ってくる
・オリジナルサービスやオリジナルアプリなどの開発までサポート