Skip to content

Instantly share code, notes, and snippets.

@oyakodon
Created March 23, 2016 15:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oyakodon/4b47fcff5507e13448d0 to your computer and use it in GitHub Desktop.
Save oyakodon/4b47fcff5507e13448d0 to your computer and use it in GitHub Desktop.
Simple Bot for Twitter / C# Console
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