#0.準備・リファレンス
■C#とCoreTweetを使って簡単にTwitterへツイートするbotを作る[酢ろぐ!]
https://blog.ch3cooh.jp/entry/20140808/1407464147
■twitterのdeveloper
https://developer.twitter.com/
■coreTweet リファレンス
https://github.com/CoreTweet/CoreTweet/wiki/REST-API-を使う
#1.bot概要
コードはそんなに工夫したりせず実直に書いてます…(言い訳)
■bot概要:仮想通貨リップルのツイートに対して
①ツイート取得
②いいね
③リツイート
をtwitter社のAPI使用上限に引っかからないよう永遠と行うbotです。
ツイートにフィルタリング条件(アフィや広告を除外)をかけ、
クリアしたもののみツイートしてます。(ハッシュタグ数やNGワード等)
細かい詳細は…読んでください
何かの参考になればよきです
#2.まずは、メイン呼出処理部分
using System;
namespace twitterBotTest
{
class Program
{
static void Main(string[] args)
{
try
{
XrpTweetcs xrpT = new XrpTweetcs();
xrpT.xrpTweetAsync();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
#2.XrpTweetcsクラス
###2-0.XrpTweetcsクラスのメイン
public void xrpTweetAsync()
{
/**************************/
// 共通変数
/**************************/
long tweetCntNo = 1;
bool keyWordFlag = true;
String keyWord;
tweetInfoStruc twiInfo = new tweetInfoStruc();
try
{
/**************************/
// トークンの作成
/**************************/
var tokens = createTwitterToken();
//tokens.Statuses.Update(new { status = text }); // ツイート
/**************************/
// 検索・リツイートの繰り返し
/**************************/
while (true)
{
/**************************/
// 検索
/**************************/
// 検索ワード決定
if (keyWordFlag)
{
keyWord = "リップル";
keyWordFlag = false;
}
else
{
keyWord = "XRP";
keyWordFlag = true;
}
// 検索実行
var result = tokens.Search.Tweets(count => 100, q => keyWord);
/**************************/
// リツイート実行
/**************************/
foreach (var tweet in result)
{
// つぶやき格納
string tweetComent = tweet.Text;
// コンソールに表示
Console.WriteLine("===Tweet【" + tweetCntNo + "】【ID:"+ tweet.Id + "】===============================================");
Console.WriteLine(tweetComent);
// カウンタ
tweetCntNo += 1;
// 対象チェック
if (checkTweet(tweet, keyWordFlag))
{
try
{
// リツイート
tokens.Statuses.Retweet(id => tweet.Id);
// いいね
tokens.Favorites.Create(id => tweet.Id);
Console.WriteLine("---result-------------------------------------------------------------");
Console.WriteLine("リツイート");
Console.WriteLine("=======================================================================");
}
catch(Exception e)
{
Console.WriteLine("---result-------------------------------------------------------------");
Console.WriteLine(e.Message);
Console.WriteLine("=======================================================================");
}
// コンソールに表示
// Console.WriteLine("{0}: {1}",
// tweet.User.ScreenName, tweet.Text);
// Console.WriteLine("---------");
Thread.Sleep(100000);
}
else
{
Console.WriteLine("---result-------------------------------------------------------------");
Console.WriteLine("スルーーーーーーーーーーー");
Console.WriteLine("=======================================================================");
}
}
Thread.Sleep(60000);
}
}catch(Exception e)
{
Console.WriteLine("*****想定外エラー******************************************************");
Console.WriteLine(e.Message);
Console.WriteLine("*****想定外エラー******************************************************");
// 再帰的呼出
xrpTweetAsync();
}
return;
}
###2-1.トークンの取得
※本当はiniとか外だししたい・・・
private static CoreTweet.Tokens createTwitterToken()
{
/**************************/
// APIキーの設定
/**************************/
String APIKEY = "{API key}";
String APIKEY_S = "{API secret}";
String TOKEN = "{Access token}";
String TOKEN_S = "{Access token secret}";
/**************************/
// トークン作成
/**************************/
try
{
var tokens = CoreTweet.Tokens.Create(APIKEY
, APIKEY_S
, TOKEN
, TOKEN_S);
return tokens;
}
catch (Exception e)
{
throw new Exception("トークンの作成に失敗しました。");
}
}
###2-2.ツイッターフィルタリング
※本当はiniとか外だししたい・・・(2回目)
private bool checkTweet(Status tweet,bool keyWordFlag)
{
//---------------------------//
// いいねの数
//---------------------------//
//if (tweet.FavoriteCount < 1)
//{
// return false;
//}
//---------------------------//
// 日本語
//---------------------------//
if (!tweet.Language.Equals("ja"))
{
return false;
}
//---------------------------//
// タグの数
//---------------------------//
// タグのカウント
HashtagEntity[] hashTags = tweet.Entities.HashTags;
if(hashTags.Length > 2)
{
return false;
}
//---------------------------//
// 除外タグ検索
//---------------------------//
foreach(var tag in hashTags)
{
if (tag.Text.Equals("仮想通貨") ||
tag.Text.Equals("ICO"))
{
return false;
}
}
//---------------------------//
// 除外ワード検索
//---------------------------//
if (tweet.Text.Contains("プレゼント") ||
tweet.Text.Contains("メルマガ") ||
tweet.Text.Contains("お得") ||
tweet.Text.Contains("最新速報") ||
tweet.Text.Contains("仮想通貨】") ||
tweet.Text.Contains("【仮想通貨") ||
tweet.Text.Contains("New post:") ||
tweet.Text.Contains("【仮想通貨") ||
tweet.Text.Contains("謝礼") ||
tweet.Text.Contains("放題") ||
tweet.Text.Contains("メールアドレスを登録") ||
tweet.Text.Contains("暗号通貨ニュース") ||
tweet.Text.Contains("イーサリアム リップル") ||
tweet.Text.Contains("■ノアコイン") ||
tweet.Text.Contains("情報局") ||
tweet.Text.Contains("GMO") ||
tweet.Text.Contains("動画→") ||
tweet.Text.Contains("通貨情報") ||
tweet.Text.Contains("【XRP】") ||
tweet.Text.Contains("【リップル】") ||
tweet.Text.Contains("【2018年】") ||
tweet.Text.Contains("仮想通貨サムライ") ||
tweet.Text.Contains("底打ち記念動画") ||
tweet.Text.Contains("最新チャート") ||
tweet.Text.Contains("とは?") ||
tweet.Text.Contains("新しい記事を投稿しました") ||
tweet.Text.Contains("仮想通貨News") ||
tweet.Text.Contains("【朗報】") ||
tweet.Text.Contains("【悲報】") ||
tweet.Text.Contains("応募条件") ||
tweet.Text.Contains("仮想通貨ニュース") ||
tweet.Text.Contains("仮想通貨速報") ||
tweet.Text.Contains("【最速】") ||
tweet.Text.Contains("【『リップル』") ||
tweet.Text.Contains("【『XRP』"))
{
return false;
}
//---------------------------//
// 除外ワード検索
//---------------------------//
if (tweet.Text.Contains("プレゼント"))
{
return false;
}
//---------------------------//
// XRP検索時、本文にXRPが入っていない場合は除外
//---------------------------//
if (keyWordFlag && !tweet.Text.Contains("XRP"))
{
return false;
}
//---------------------------//
// XRPが含まれているだけのリツイートは除外
//---------------------------//
string tweetCmnt = "";
tweetCmnt = Regex.Replace(tweetCmnt, "RT.*:", String.Empty);
if (keyWordFlag && !tweetCmnt.Contains("XRP"))
{
return false;
}
// 合格
return true;
}
おーわり