【C# / Twitter】規制されるまでの残りPost数を適当に算出する方法
いろいろ試してみたら意外といい感じにできたので記事にしてみます。
使用ライブラリはTweetSharpです。
// アカウントのクラス class Twitter_Account { public String ConsumerKey, ConsumerSecret, AccessToken, AccessSecret; }; // 規制されるまでの残りPost可能数を返す。 int TwitterRegulation(Twitter_Account Account) { // 規制されるまでの残りPost可能数。ここで128とおく。128である理由は下を参照。 int Result = 128; // TwitterServiceをとりあえず作る TwitterService TwitServ = new TwitterService( Account.ConsumerKey, Account.ConsmerSecret); // OAuth TwitServ.AuthenticateWith(Account.AccessToken, Account.AccessSecret); // 現在時刻をUTC標準時で取得(Twitterのつぶやきの時間とかはUTCで管理されているため) DateTime NowTime = DateTime.UtcNow; // 自身のつぶやきを取得する ListTweetsOnUserTimelineOptions Opt = new ListTweetsOnUserTimelineOptions(); // 127Postで規制と聞いたから128にしておく。ここらへんは適当に調整 Opt.Count = 128; // 自身のつぶやきを128件取得する var Tweets = TwitServ.ListTweetsOnUserTimeline(Opt); // 取得したつぶやきを一つひとつ見ていく foreach(var Tweet in Tweets) { // 現在時刻 - そのツイートの時間を取得する TimeSpan Ts = NowTime - Tweet.CreateDate; // もしその時間が3時間を超えていたら(=呟いてから3時間が経過していれば) if(Ts.Hours >= 3){ // 現在のループを終える break; } // カウントを1減らす Result--; } // 返却 return Result; }
この関数を実行することで、「128 - 3時間以内に呟いたPost数」が返ってきます。
この関数の動作としては、自身の今までのつぶやきを取得して「3時間以内に呟いた数」だけ数字を減らしています。128にしている理由は、コメントにも書いた通り適当です。適切な数を知っているならそちらにしたほうがいいでしょう。
また、この関数はそこそこ時間をくうので、何度も実行させると動作が遅くなるかもしれません。
余談ですが、この方法でKrileの規制予測の値と見事一致しました。似た方法を使っているのかもしれません。
追記: どうやら一致する時としない時があるみたいです。具体的には、規制になってからすぐ解除された場合、128まで戻っているはずですが、この方法ではそこまでは加味しないので値がずれます。
この問題に対処するなら、規制カウント開始時間、規制されたカウントの両方を保持しておいて、規制されたら規制カウント開始時間+3hまで規制状態を返すようにして、その時間が過ぎた次のツイート後に規制カウント開始時間を新たに設定し、同様の操作をさせるとできそうです。
ただ、面倒そうなので僕はやる気にはなりません。