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

C#

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

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

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

準備

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

方法はココに書いてあります。

APIキーの取りかたも書いてありますが、ココのほうが情報が新しいです。

キーはあとで使います。

プロジェクト名を決めるときは少し注意してください

ツイートする

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に「spam」が入っているユーザをアンフォローしています。

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

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

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";
            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行目~)

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

さっきと同じで、リスト上の番数でブロックもできます。(28行目)

フォロワーリストもフォローと同じやり方で、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ファイルと同じフォルダに置いてください。