CoreTweetとADGVでたくさんブロックするツール作ったので覚書

ひどいツール作ったのでメモ兼ねてポイント残しておきます。

## 経緯
ツイッターで#～と繋がりたいとか、裏垢なんちゃらとかスパムアカウントをまとめてブロックしたかったのです。

## 作ったもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263877/bd0bcf3f-91ad-0075-3a3f-f59477b7f06b.png)
名前はTwitterブロックんです。

キーワード検索をすると、該当のフレーズをツイートしているアカウントを抽出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263877/0a3953bb-2640-a5b5-c63d-270de4f5b086.png)

使っているグリッドは**ADGV**です。nugetからインストール出来ます。
インストールしたあとは、コンポーネントとして使用できるようにするためにツールボックスからDLLを読み込んでください。
[![Image from Gyazo](https://i.gyazo.com/22d34ab972b31143dcb66004ac1fc82a.gif)](https://gyazo.com/22d34ab972b31143dcb66004ac1fc82a)

あとはCoreTweetも同じようにnugetからインストールしてusingに追加すればOKです。

ADGVの初期化は下記の感じ

```C#
                _dataTable = _dataSet.Tables.Add("Table");
                _dataTable.Columns.Add("ブロック対象", typeof(Boolean));
                _dataTable.Columns.Add("ユーザーID", typeof(string));
                _dataTable.Columns.Add("ユーザー名", typeof(string));
                _dataTable.Columns.Add("ツイート内容", typeof(string));
                bindingSource_main.DataMember = _dataTable.TableName;
```

ユーザー検索はこんな感じで色々他のユーザーさんが用いている内容そのままです。
[C\#でTwitterアプリを作る 第2回 Timeline / Status \- らこらこブログ](http://laco0416.hatenablog.com/entry/2014/03/24/213953)

[CoreTweetでPINを取得してツイートする方法（OAuthによるトークン発行） \- Qiita](https://qiita.com/peijun/items/c9f1be33af040ed6d32f)

```C#

            // グローバル検索
            string keyword = textBox2.Text;
            if (!keyword.Equals(""))
            {
                _dataTable.Clear();
                var result = tokens.Search.Tweets(count => 100, q => keyword);
                // countは読み込み数。指定しなければDefoultの数値が入る。
                foreach (var value in result)
                {
                    string scrName = value.User.ScreenName;     // @User_ID
                    string name = value.User.Name;              // ユーザー名
                    string text = value.Text;                   // Tweet
                    AddUserData(false, scrName, name, text);
                }
            }
```

```C#
        private void AddUserData(Boolean check, string scrName, string name, string text)
        {
            try
            {
                object[] newrow = new object[] {
                        check,
                        scrName,
                        name,
                        text
                };
                _dataTable.Rows.Add(newrow);
                Application.DoEvents();
            }
            catch
            {
            }
        }
```

ブロックはこれだけで出来ます。CoreTweet便利。
catchでエラー処理とかちゃんとしないとですね。

```C#
                for (int i = 0; i < advancedDataGridView_main.RowCount; i++)
                {
                    if (Convert.ToBoolean(advancedDataGridView_main.Rows[i].Cells[0].Value))
                    {
                        try
                        {
                            tokens.Blocks.Create(screen_name => advancedDataGridView_main.Rows[i].Cells[1].Value);
                        }
                        catch
                        {

                        }
                    }
                }
```

## まとめ
CoreTweet凄い便利。ADGVも便利。
1時間ぐらいである程度形になるものにはなるので面白かったです。