C#からTwitterアカウントを動かす【サンプルコード】

C#

こんにちは、ひつじ先輩です。

今回は、C#でTwitterアカウントを動かすコードを紹介します。

 

CoreTweetを利用すると、シンプルなコードでいろいろできます。

ほとんどコピペでOKです。

スポンサーリンク

C#でTwitterの準備

まず、Visual StudioにCoretweetをインストールします。

方法はこちらを参考にしてください。

 

APIキーの取りかたは、こちら。

Twitter API Key を取得する方法
Twitter と連携するアプリケーションや Twitter Bot などを作る際, まず必要となるのが Twitter API Key です. 今回その取得方法について紹介します. Twitter API Key とは? 大抵アプリケーションを作る際に必要になるのか Consumer Key, Consumer Se...

1つ目のサイトより、情報が新しいです。

 

APIキーはあとで、TwitterのAPIを使うために必要です。

 

プロジェクト名を決めるときは「coreTweet」といった言葉を避けます。

エラーの原因になります。

System.TypeLoadExceptionの原因と簡単な対処
この記事では、System.TypeLoadExceptionという例外の原因と対処法を書きます。プロジェクトを作り直し、名前を変えてみたらうまく動きました。プロジェクト名がパッケージ名と同じだと、読み込みがうまくいかないようです。

 

C#でTwitterボット

  1. ツイートする
  2. リツイート・いいねする
  3. フォロー・リストを読込
  4. アンフォローする
  5. フォロワーリストを読込・ブロック
  6. タイムライン・リプライを読込
  7. プロフィール・画像・背景変更

7つのサンプルコードを公開しています。

 

①ツイートする

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //ツイートする
                Status status = tokens.Statuses.Update(new { status = "ツイートのテスト。ここに書いた内容がツイートされます。" });
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

プロジェクトにコードをコピーしたら、7行目の、

namespace TwitterAPI

namespace 自分で決めた名前

に変えてください。

 

次に、4つのAPIキーを14行目からの、

string ConsumerKey
string ConsumerSecret
string AccessToken
string AccessSecret

の右がわに書きこみます。

ここまでの説明は、あとで紹介する別のコードでも同じです。

 

最後に25行目の

ツイートのテスト。ここに書いた内容がツイートされます。

のところをツイートしたい内容に書きかえれば完成です。

ツイートはリツイートと合わせて、1日に2400回できます。

 

②リツイート・いいねする

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";

            string URL = "https://twitter.com/baacash_/status/790236192868487168"; //リツイートしたいツイートのURL
            long ID = long.Parse(URL.Substring(URL.Length - 18)); //URLからIDを取り出す

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //ツイートを読みこむ
                Status status = tokens.Statuses.Show(id => ID);

                //リツイートする
                if ((bool)status.IsRetweeted == false)
                {
                    //ツイートIDを使ってリツイートする
                    tokens.Statuses.Retweet(id => ID);
                    Console.WriteLine(URL+"をリツイートしました。");
                }

                //いいねする
                if ((bool)status.IsFavorited == false)
                {
                    //ツイートIDを使っていいねする
                    status = tokens.Favorites.Create(id => ID);
                    Console.WriteLine(URL + "をいいねしました。");
                }
                Console.ReadKey();
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

19行目、string URLのところに、対象のツイートのURLを書きます。

URLから、ツイートIDを抜き出して使っています。

IDは、URL末尾の18ケタの数字です。

 

リツイートはツイートと合わせて、1日に2400回できます。

いいねについては、情報がありません。

おそらく、この2400回に含まれるようです。

 

③フォロー・リストを読込

ユーザをフォローしたり、フォローリストを読み込むコード。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";

            string followTarget = "baacash_"; //フォローする相手のID

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //フォローする
                tokens.Friendships.Create(screen_name => followTarget); //followTargetに入っているIDのユーザをフォロー
                Console.WriteLine(followTarget + "をフォローしました。");

                //フォローリストの読み込み
                Cursored<CoreTweet.User> fl = tokens.Friends.List(user_screename => tokens.ScreenName); //上から20人を読みこむ
                //fl = tokens.Friends.List(user_screename => tokens.ScreenName, cursor => fl.NextCursor); //次の20人を読みこむ
                //fl = tokens.Friends.List(user_screename => tokens.ScreenName, cursor => fl.NextCursor); //さらに20人を読みこむ
                Console.WriteLine("フォローリストの一番上のユーザ:" + fl[0].ScreenName); //フォローしたユーザを表示する
                Console.ReadKey();
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

19行目にフォロー相手のIDを書きます。

27行目でそのIDをフォローしています。

1日に1000回まで使うことができます。

 

しかし、短い時間にたくさんフォローすると凍結のおそれがあります。

新しいアカウントであれば、1日20名くらいまでなら安全なようです。

 

31行目でフォローリストを読みこんでいます。

1回で、20番目までのユーザをリストにいれます。

このコードでは先ほどフォローした、1番目のIDを表示しています。

 

40人、60人と読みこむときは、コード内の、

32行目(次の20人を読みこむ)
33行目(さらに20人を読みこむ)

のコメントアウトを外してください。

さらに読みこむこともできますが、15分に15回という制限があります。

 

④アンフォローする

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";

            string unfollowTarget = "spam"; //アンフォローする相手のIDにふくまれる文字列

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //フォローリストの読み込み
                Cursored<CoreTweet.User> fl = tokens.Friends.List(user_screename => tokens.ScreenName); //上から20人を読み込む

                //アンフォローする
                foreach (var user in fl)
                {
                    if (user.ScreenName.IndexOf(unfollowTarget) != -1)
                    {
                        tokens.Friendships.Destroy(user.ScreenName);
                        Console.WriteLine(user.ScreenName + "をアンフォローしました。");
                    }
                }
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

さっきと同じように、フォローリストを読みこみます。(27行目)

リストのIDを順にチェックして、ユーザを選んでいます。(30行~)

IDに「spam」が入っているユーザをアンフォローしています。

 

次のコードはIDではなく、リスト上の何番目かでアンフォロー対象を選んでいます(28行目)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //フォローリストの読み込み
                Cursored<CoreTweet.User> fl = tokens.Friends.List(user_screename => tokens.ScreenName); //上から20人を読み込む

                //アンフォローする
                tokens.Friendships.Destroy(fl[9].ScreenName); //リストで上から10番目のユーザをアンフォロー
                Console.WriteLine("フォローリスト10番目のユーザ:" + fl[9].ScreenName + "をアンフォローしました。");
                
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

 

⑤フォロワリストを読込・ブロック

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";
            string blockTarget = "spam"; //ブロックする相手のIDにふくまれる文字列

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //フォロワーリストの読み込み
                Cursored<CoreTweet.User> fl = tokens.Followers.List(user_screename => tokens.ScreenName); //上から20人を読み込む

                //IDに"spam"をふくむユーザをブロックする
                foreach (var user in fl)
                {
                    if (user.ScreenName.IndexOf(blockTarget) != -1)
                    {
                        tokens.Blocks.Create(user.ScreenName);
                        Console.WriteLine(user.ScreenName + "をブロックしました。");
                    }
                }

                Console.ReadKey();
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

今度はフォロワーリストを読みこみます。(26行目)

IDに「spam」が入っているユーザをブロックしています。(29行目~)

 

次のコードは、さっきと同じでリスト上の番数でブロックしています。(28行目)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //フォロワーリストの読み込み
                Cursored<CoreTweet.User> fl = tokens.Followers.List(user_screename => tokens.ScreenName); //上から20人を読み込む

                //ブロックする
                tokens.Blocks.Create(fl[9].ScreenName);
                Console.WriteLine("フォロワーリスト10番目のユーザ:" + fl[9].ScreenName + "をブロックしました。");

                Console.ReadKey();
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

フォロワーリストもフォローと同じやり方で、20人ずつ読みこめます。

15分に15回という制限も同じです。

 

⑥タイムライン・リプライを読込

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //①タイムライン(自分のアカウントのツイート)を取得
                Console.WriteLine("タイムライン(自分のアカウントのツイート)を取得");
                var tl = tokens.Statuses.UserTimeline();
                foreach (var item in tl) Console.WriteLine(item.Text + "\n");
                
                //間を空ける
                Console.WriteLine();
                Console.WriteLine();
                Console.WriteLine();
                
                //②タイムライン(フォローしているユーザのツイート)を取得
                Console.WriteLine("タイムライン(フォローしているユーザのツイート)を取得");
                var tl2 = tokens.Statuses.HomeTimeline(include_rts => false);
                foreach (var item in tl2) Console.WriteLine(item.Text + "\n");
                
                //間を空ける
                Console.WriteLine();
                Console.WriteLine();
                Console.WriteLine();
                
                //③自分に来たリプライを取得
                Console.WriteLine("自分に来たリプライを取得");
                var reps = tokens.Statuses.MentionsTimeline(include_rts => true,count => 30);
                foreach (var item in reps)
                {
                    Console.WriteLine(item.User.ScreenName);
                    Console.WriteLine(item.Text + "\n");
                }

                Console.ReadKey();
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

24行目~

自分のアカウントのツイートを読みこみます。

新しいものから20件読みこまれます。

34行目~

自分がフォローしているユーザのつぶやきを読みこみます。

「include_rts」をfalseにすると、RTは読みこまれなくなります。

44行目~

自分向けのリプライを読みこみます。

「count」を30にすると、30件読みこみます。

最大200個まで一度に読みこめます。

 

すべて、制限は15分に15回です。

 

⑦プロフィール・画像・背景変更

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; //追加してください。
using CoreTweet; //追加してください。(Nugetからパッケージを取得)

namespace TwitterAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string ConsumerKey = "ConsumerKey";
            string ConsumerSecret = "ConsumerSecret";
            string AccessToken = "AccessToken";
            string AccessSecret = "AccessSecret";

            string name = "名前のテスト"; //新しい"名前"を入れる
            string url = "https://baacash.com/system-typeloadexception"; //新しい"URL"を入れる
            string loc = "場所のテスト"; //新しい"場所"を入れる
            string bio = "はじめまして。よろしくお願いします。"; //新しいプロフィールを入れる
            string imagePath = "image.jpg"; //新しいプロフィール画像のファイル名を入れる
            string bannerPath = "banner.jpg"; //新しい背景画像のファイル名を入れる

            try
            {
                //認証
                Tokens tokens = Tokens.Create(ConsumerKey, ConsumerSecret, AccessToken, AccessSecret);

                //プロフィールの更新
                tokens.Account.UpdateProfile(name, url, loc, bio);

                //プロフィール画像の更新
                tokens.Account.UpdateProfileImage(image => new FileInfo(imagePath));

                //背景画像(バナー)の更新
                tokens.Account.UpdateProfileBanner(banner => new FileInfo(bannerPath));

                Console.ReadKey();
            }
            catch (TwitterException e)
            {
                //CoreTweetに関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
            catch (System.Net.WebException e)
            {
                //インターネット接続に関するエラー。
                Console.WriteLine(e.Message); //メッセージを表示する
                Console.ReadKey();
            }
        }
    }
}

設定できるのは、20行目からの、

string name
string url
string loc
string bio
string imagePath
string bannerPath

6項目あります。

コードをこのまま使うときは、変えたくないところも入力してください。

変えたくないところには、今の設定と同じものを入力します。

 

このままだと、すべての要素を設定どおりに変えるため、名前が

名前のテスト

になったりします。

 

また、画像ファイル名を変えないと、ファイルがないためエラーになります。

画像ファイルはexeファイルと同じフォルダに置いてください。

 

タイトルとURLをコピーしました