Created
March 23, 2016 15:20
-
-
Save oyakodon/4b47fcff5507e13448d0 to your computer and use it in GitHub Desktop.
Simple Bot for Twitter / C# Console
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using CoreTweet; | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
// トークン設定 | |
// 自分のアプリ | |
var con_key = ""; | |
var con_sec = ""; | |
// 自分のユーザ | |
var acc_key = ""; | |
var acc_sec = ""; | |
// トークンを創造(Create)する | |
var tokens = Tokens.Create(con_key, con_sec, acc_key, acc_sec); | |
// ツール選択 | |
Console.WriteLine("【統計ちゃん(仮)】 :1 / 【片思い確認くん】 :2"); | |
Console.Write("どちらをツイートしますか? (1 / 2) > "); | |
var choice = Console.ReadKey().KeyChar - '0'; | |
try | |
{ | |
Console.WriteLine(); | |
Console.WriteLine("情報を取得しています..."); | |
var tweet = ""; | |
// Twitterから情報取得、及びツイート本文作成 | |
switch ( choice ) | |
{ | |
case 1: | |
tweet = Stat(tokens); | |
break; | |
case 2: | |
tweet = One_way_love(tokens); | |
break; | |
case 3: | |
showLimit(tokens); | |
return; | |
default: | |
throw new Exception("選択が不適切です。"); | |
} | |
Console.WriteLine(tweet); | |
Console.WriteLine(); | |
// ツイート確認 | |
Console.WriteLine("※{0}文字", tweet.Length); | |
Console.Write("上記のようにツイートします、よろしいですか?(y / n) > "); | |
var responce = Console.ReadKey(); | |
Console.WriteLine(); | |
if ( responce.KeyChar == 'y' ) | |
{ | |
tokens.Statuses.Update(status => tweet); | |
Console.WriteLine("正常にツイートされました。"); | |
} | |
else | |
{ | |
Console.WriteLine("ツイートはキャンセルされました。"); | |
} | |
} | |
catch ( Exception e ) | |
{ | |
Console.WriteLine(e.Message); | |
} | |
} | |
static string Stat(Tokens t) | |
{ | |
// アカウント作成からの累計日数やツイート数、平均ツイート数をツイートする | |
var tweet = "【統計ちゃん(仮)】\n"; // ツイート本文 | |
var me = t.Account.UpdateProfile(); // 自分自身のプロフィール | |
var tweetCount = me.StatusesCount + 1; // ツイート数(今から送るのも含めるので+1) | |
var created = me.CreatedAt.ToLocalTime(); // 作成日時 | |
var now = DateTimeOffset.Now; // 今の時間 | |
var span = now - created; // 今とアカウント作成日時との差 | |
var tweet_per_day = Math.Round(tweetCount / (span.Days + 1.0), 2); // 平均ツイート数 | |
// ツイートの作成 | |
tweet += me.Name + "は...\n"; | |
tweet += " Twetterを始めてから今日で[" + (span.Days + 1) + "]日目で\n"; | |
tweet += " このツイートで、[" + tweetCount + "]ツイート目です。\n"; | |
tweet += " また、一日の平均ツイート数は[" + tweet_per_day + "]ツイートです\n"; | |
tweet += "(" + now.ToLocalTime().ToString("MM/dd HH:mm:ss") + " 現在)"; | |
if ( tweet.Length > 140 ) | |
{ | |
throw new Exception("ツイートの文字数が140を超えました。"); | |
} | |
else | |
{ | |
return tweet; | |
} | |
} | |
static string One_way_love(Tokens t) | |
{ | |
// 片思い・両思い・片思われをツイートする | |
var tweet = "【片思い確認くん】\n"; // ツイート本文 | |
// 自分がフォローしている「フレンド」のIDを取得 | |
var friend_list = new List<long>(); // フレンドのidを格納するリスト | |
var friends = t.Friends.Ids(cursor => -1); | |
do | |
{ | |
foreach ( var f in friends ) | |
{ | |
friend_list.Add(f); | |
} | |
friends = t.Friends.Ids(cursor => friends.NextCursor); | |
} while ( friends.Count != 0 ); | |
var kata_omoi = 0; // 片思いユーザ数 | |
var ryo_omoi = 0; // 両思いユーザ数 | |
var kata_omoware = 0; // 片思われユーザ数 | |
// 他人からフォローされている「フォロワー」のIDを取得 | |
var followers = t.Followers.Ids(cursor => -1); | |
do | |
{ | |
foreach ( var f in followers ) | |
{ | |
if ( friend_list.Contains(f) ) | |
{ | |
// もし、自分もフォローしていたら、両思い | |
ryo_omoi++; | |
friend_list.Remove(f); // 両思いは除く | |
} | |
else | |
{ | |
// 相手からだけフォローされていたら、片思われ | |
kata_omoware++; | |
} | |
} | |
followers = t.Followers.Ids(cursor => followers.NextCursor); | |
} while ( followers.Count != 0 ); | |
// フォローしているフレンドの中で両思いを除いたものが、片思いユーザ数 | |
kata_omoi = friend_list.Count; | |
// ツイートの作成 | |
tweet += "(●´∀`)ノ (´・ω・`)(片思い): " + kata_omoi + "人\n"; | |
tweet += "(●´∀`)人(´∀`●)(両思い): " + ryo_omoi + "人\n"; | |
tweet += "(´・ω・`) へ(´∀`●)(片思われ): " + kata_omoware + "人\n"; | |
tweet += "(" + DateTime.Now.ToString("MM/dd HH:mm:ss") + " 現在)"; | |
if ( tweet.Length > 140 ) | |
{ | |
throw new Exception("ツイートの文字数が140を超えました。"); | |
} | |
else | |
{ | |
return tweet; | |
} | |
} | |
static void showLimit(Tokens t) | |
{ | |
// APIの残数等を取得して表示する(デバッグ用) | |
var rateLimits = t.Application.RateLimitStatus(); | |
foreach ( var rateLimit in rateLimits["statuses"] ) | |
{ | |
Console.WriteLine("{0}: {1} {2}", | |
rateLimit.Key, rateLimit.Value.Remaining, | |
rateLimit.Value.Limit); | |
Console.WriteLine("---------"); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment