* Linux(Ubuntu)で,指定したアカウントのタイムライン200件ツイートを取得(CoreTweet)するC#のプログラム
:CATEGORIES: C#
元はWindows10のVisual Studioで,.NET Coreとかのコンソールとして作成したものでした。そちらはnamespaceがConsoleAppTwitterとなっていました。これがC#で作成した初めてのプログラムですが,Windows10では先にGUIでウィンドウ処理を行っていました。
using System; using System.Collections.Generic; using System.IO; namespace ttt { class Program { static void Main(string[] args) { string tweetText = TweetsGet(); Console.WriteLine(tweetText); } static string TweetsGet() { //var screenName = cmb1.SelectedValue.ToString(); var screenName = "motoken_tw"; var str = ""; var tokens = CoreTweet.Tokens.Create( ("ConsumerKey", "ConsumerSecret", "AccessToken", "AccessSecret"); // var session = CoreTweet.OAuth.Authorize(("ConsumerKey", "ConsumerSecret", "AccessToken", "AccessSecret"); // var url = session.AuthorizeUri; // -> user open in browser // //get pin // tokens = CoreTweet.OAuth.GetTokens(session, "PIN code"); var parm = new Dictionary<string, object>(); parm["count"] = 200; parm["screen_name"] = screenName; parm["tweet_mode"] = "extended"; var tweets = tokens.Statuses.UserTimeline(parm); int i = 1; foreach (var tweet in tweets) { if (tweet.RetweetedStatus == null) { var tw_url = ""; tw_url = "https://twitter.com/" + tweet.User.ScreenName + "/status/" + tweet.Id; str = str + string.Format("\n---------{0:D3}---------\n", i); str = str + "TW " + tweet.User.Name + "(@" + tweet.User.ScreenName + ") 日時: " + tweet.CreatedAt.DateTime.AddHours(9) + " URL: " + tw_url + "\r\n" + System.Text.RegularExpressions.Regex.Replace( tweet.FullText, "^", "> ", System.Text.RegularExpressions.RegexOptions.Multiline) + "\r\n"; } else { var tw_url = "https://twitter.com/" + tweet.User.ScreenName + "/status/" + tweet.Id; var rt_url = "https://twitter.com/" + tweet.RetweetedStatus.User.ScreenName + "/status/" + tweet.RetweetedStatus.Id; str = str + string.Format("\n---------{0:D3}---------\n", i); str = str + "RT " + tweet.User.Name + "(@" + tweet.User.ScreenName + ") |" + tweet.RetweetedStatus.User.Name + "(@" + tweet.RetweetedStatus.User.ScreenName + ") 日時:" + tweet.CreatedAt.DateTime.AddHours(9) + "/" + tweet.RetweetedStatus.CreatedAt.DateTime.AddHours(9) + " URL: " + tw_url + " " + rt_url + "\r\n" + System.Text.RegularExpressions.Regex.Replace( tweet.FullText, "^", "> ", System.Text.RegularExpressions.RegexOptions.Multiline) + "\r\n"; } i = i + 1; } return str; } } }
tweet.CreatedAt.DateTime.AddHours(9) という部分でツイートの時刻を日本時間に変更しています。
よくみると改行コードが\r\nでWindowsのままになっていましたが,Linuxの環境でも問題はなさそうでした。
他に簡潔な方法があるのかもしれないですが,System.Text.RegularExpressions.Regex.Replace(tweet.FullText, "^", "> ", System.Text.RegularExpressions.RegexOptions.Multiline) は,行頭に引用符を付けるだけの処理です。
Rubyだと#{tweet_text.gsub(/^/,'> ')} だけで終わる処理です。
using System.Text.RegularExpressions;
……省略……
bool result = Regex.IsMatch("{検査対象文字列}", "{正規表現パターン}");[source:]正規表現を使って文字列がパターンに一致するか調べるには?[C#/VB]:.NET TIPS - @IT https://www.atmarkit.co.jp/ait/articles/1701/25/news025.html
やはり,ここでusingの出番があったようです。「using System.Text.RegularExpressions;」と宣言を行い,Regex.IsMatch("{検査対象文字列}", "{正規表現パターン}");と使う方法があるようです。
次の方法の方がよさそうです。
using System.Text.RegularExpressions;
……省略……
var rx = new Regex("{正規表現パターン}", RegexOptions.Compiled);
bool result = rx.IsMatch("{検査対象文字列}" );[source:]正規表現を使って文字列がパターンに一致するか調べるには?[C#/VB]:.NET TIPS - @IT https://www.atmarkit.co.jp/ait/articles/1701/25/news025.html
VBでは,C#のusingの部分が,Importsとなるようですが,Visual Basicでは見たことがなく,使った覚えがありません。