« * Linux(Ubuntu)のC#のソースコードを,dotnetコマンドでコンパイル | トップページ | // モトケンこと矢部善朗弁護士(京都弁護士会)@motoken_twのTwitterタイムライン:2020/10/27 9:26:57~2020/10/23 9:27:27 »

2020年10月26日 (月)

* Linux(Ubuntu)で,指定したアカウントのタイムライン200件ツイートを取得(CoreTweet)するC#のプログラム

:CATEGORIES: C#

 元はWindows10のVisual Studioで,.NET Coreとかのコンソールとして作成したものでした。そちらはnamespaceがConsoleAppTwitterとなっていました。これがC#で作成した初めてのプログラムですが,Windows10では先にGUIでウィンドウ処理を行っていました。

|cs| 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では見たことがなく,使った覚えがありません。

|

« * Linux(Ubuntu)のC#のソースコードを,dotnetコマンドでコンパイル | トップページ | // モトケンこと矢部善朗弁護士(京都弁護士会)@motoken_twのTwitterタイムライン:2020/10/27 9:26:57~2020/10/23 9:27:27 »