Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

【C#】CoreTweetやってみた

最近、ちょこちょことCoreTweetを試している。 よーやくプログラムをマシに触れるようになってきた気がするよ。

■CoreTweet(日本語版GitHubgithub.com

一番ありがたいおまとめは、下のサイト

blog.ch3cooh.jp

というわけで、ひと通りやってみた。

【環境】 WindowsWPFアプリケーション .net 4.5

認証周り(WPF

using CoreTweet;
using System.Configuration;

namespace MyProject.CoreTweet
{
    class CoreTweetConnection
    {
        private string consumer_key = ConfigurationManager.AppSettings["consumer_key"];
        private string consumer_secret = ConfigurationManager.AppSettings["consumer_secret"];
        private string AccessToken = Properties.Settings.Default.AccessToken;
        private string AccessTokenSecret = Properties.Settings.Default.AccessTokenSecret;

        public OAuth.OAuthSession Settion;
        public Tokens token;

        public CoreTweetConnection()
        {
            if (string.IsNullOrWhiteSpace(AccessToken))
            {
                WebAutority();
            }

            token = Tokens.Create(consumer_key, consumer_secret, Properties.Settings.Default.AccessToken, Properties.Settings.Default.AccessTokenSecret);
        }


        public void WebAutority()
        {
            if (!string.IsNullOrWhiteSpace(AccessToken))
                return;

            var webWindow = new WebWindow();

            Settion = OAuth.Authorize(consumer_key, consumer_secret);
            webWindow.MainWebBrowser.Source = Settion.AuthorizeUri;

            webWindow.Show();
        }
    }
}

認証は2種類方法がある感じ。 [Tokens.Create]で、consumer_key、consumer_secret、AccessToken、AccessTokenSecretの4種類を引数に渡して上げる方法。 それから、OAuthで一度consumer_key、consumer_secretを元に、許可ページに飛ばして、承認してもらう必要がある。

以下でWPFのWeb Browserコントロールを使って、承認プラスPINコードの探索取得を行ってみたもの。

認証画面表示ウインドウ(XAMLは省略)

using System.Windows;
using mshtml;

namespace MyProject.CoreTweet
{
    /// <summary>
    /// WebWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class WebWindow : Window
    {
        public WebWindow()
        {
            InitializeComponent();
        }

        private void LoadComplead(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            if (MainWebBrowser.Document == null)
                return;
            HTMLDocument doc = (HTMLDocument)MainWebBrowser.Document;

            IHTMLElementCollection collection = doc.getElementsByTagName("code");

            foreach (IHTMLElement x in collection)
            {
                Properties.Settings.Default.ping = x.innerText;

                Properties.Settings.Default.Save();
                Close();
            }
        }

    }
}

認証してからPINコードを取得する方法がさっぱりわからず、ウェブスクレイピング周りをひたすら調べた。 とりあえず、mshtmlライブラリで、WebブラウザコントロールからDocumentをキャストして持ってきて、Elementsを探すという手法でなんとかいけた。 ただ、Foreachで探索しているのが、なんとも。

取得した情報はSettingsファイルに保存して、再利用を測ってます。