CData Software ハンズオン（JavaコンソールアプリケーションからTwitterデータを取得）

# 使用するCData製品

- [CData Twitter JDBC Driver](http://www.cdata.com/jp/drivers/twitter/jdbc/)

# Java実行環境の確認

下記のコマンドをPowerShellもしくはDOSから実行して、Java実行環境を確認します。

```dosbatch
PS C:\> java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
```
インストールされていない場合は、下記のリンクよりJDKをダウンロードしてインストールしてください。

- [Java SE Development Kit(JDK)8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)

# CData Twitter JDBC Driverのインストール

以下のサイトから評価版ビルドをダウンロードします。

- [CData Twitter JDBC Driver](http://www.cdata.com/jp/drivers/twitter/download/jdbc/)

ダウンロードされたZIPファイル内の「setup.jar」ファイルを起動します。
(注)途中オンラインでのアクティベーションが実行されるためインターネットアクセス出来る環境で行ってください。

下記のようなインストーラが起動するので、ライセンス契約書を確認した上で、デフォルト設定のままインストールを進めて完了させます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/cd29f63a-7b21-ebc1-ed6d-009053b2c9de.png)


インストールが完了するとデフォルトブラウザが起動して製品ヘルプファイルが起動します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/71d21500-194b-806d-2468-7c2872e19181.png)

# システム環境変数への登録

インストールしたJDKのbinフォルダをシステム環境変数に登録してください。

（参考）システム環境変数の設定　「コントロールパネル > システムとセキュリティ > システム > システム詳細設定　> システムのプロパティ > 環境変数」

| 変数名 | 値 |
|:-----------------|:------------------|
| Path | C:\Program Files\Java\jdk1.8.0_152\bin |

（注）JDKのフォルダ名はインストールした任意のバージョンに変更してください。
（注）環境変数を登録したらPowerShellもしくはDOSを再起動してください。なお、その際には「管理者として実行する」で起動してください。

下記コマンドをPowerShellもしくはDOSから実行するとjavacコマンドヘルプが表示されます。システム環境変数に正常に登録が出来きました。

```dosbatch
PS C:\> javac
使用方法: javac <options> <source files>
使用可能なオプションには次のものがあります。
  -g                         すべてのデバッグ情報を生成する
  -g:none                    デバッグ情報を生成しない
　　　　〜 (省略) 〜
  -Werror                    警告が発生した場合にコンパイルを終了する
  @<filename>                ファイルからの読取りオプションおよびファイル名
PS C:\>
```

# Javaのサンプルコンソールプログラムの確認

CData製品のデフォルトインストールパス配下「"C:\Program Files\CData\CData JDBC Driver for Twitter 2017J\demos\console\databrowser"」にJavaのコンソールプログラム「DataBrowser.java」が格納されています。エディタなどで内容を確認すると400行弱のJavaのサンプルコードが格納されています。今回は、コンソールからSQLを実行出来るこのプログラムを実行してみます。

# Javaプログラムのコンパイル

「DataBrowser.java」が格納されているディレクトリに移動して、javacコマンドでコンパイルします。本サンプルプログラムでは、CData kintone JDBC Driverのライブラリを利用しているので「cdata.jdbc.kintone.jar」をクラスパス（-cp）で指定します。

```dosbatch
PS C:\> cd "C:\Program Files\CData\CData JDBC Driver for Twitter 2017J\demos\console\databrowser"
PS C:\Program Files\CData\CData JDBC Driver for Twitter 2017J\demos\console\databrowser> javac -cp ".\;../../../lib/cdata.jdbc.twitter.jar" DataBrowser.java
```

コンパイルが正常に完了すると、複数の「.class」ファイルが同ディレクトリに作成されます。

```dosbatch
PS C:\Program Files\CData\CData JDBC Driver for Twitter 2017J\demos\console\databrowser> dir


    ディレクトリ: C:\Program Files\CData\CData JDBC Driver for Twitter 2017J\demos\console\databrowser


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2017/11/07      1:55            256 .classpath
-a----       2017/11/07      1:55            335 .project
-a----       2018/01/14     16:30           2257 ConsoleDemo.class
-a----       2018/01/14     16:30            894 DataBrowser$1.class
-a----       2018/01/14     16:30            686 DataBrowser$2.class
-a----       2018/01/14     16:30            750 DataBrowser$3.class
-a----       2018/01/14     16:30            902 DataBrowser$ERRORS.class
-a----       2018/01/14     16:30           1040 DataBrowser$QUERY_TYPES.class
-a----       2018/01/14     16:30           1333 DataBrowser$TERMS.class
-a----       2018/01/14     16:30          10856 DataBrowser.class
-a----       2017/11/07      1:55          13814 DataBrowser.java
-a----       2017/11/07      2:09           2907 databrowser.properties
```

# Javaプログラムの実行

これでは、サンプルプログラムを実行して見ましょう。クラスパス（-cp）をパラメータに指定することを忘れないでください。

```dosbatch
PS C:\Program Files\CData\CData JDBC Driver for Twitter 2017J\demos\console\databrowser> java -cp ".\;../../../lib/cdata.jdbc.twitter.jar" DataBrowser
```

起動すると下記のようなコンソールアプリケーションが起動します。

```dosbatch
PS C:\Program Files\CData\CData JDBC Driver for Twitter 2017J\demos\console\databrowser> java -cp ".\;../../../lib/cdata
.jdbc.twitter.jar" DataBrowser
******************************************************************
                 Twitter 2017J デモ
このデモは、CData JDBC Driver For Twitter 2017J を使用します。
******************************************************************
下に接続プロパティを入力してください。

OAuthAccessToken:
```
以下の項目を設定ください。

| TwitterのOAuthクレデンシャル | 設定項目 |
|:-----------------|------------------|
| Consumer Key (API Key) |OAuth Client Id |
| Consumer Secret (API Secret) | OAuth Client Secret |
| Access Token | OAuth Access Token |
| Access Token Secret | OAuth AccessToken Secret |


本コンソールアプリケーションで使用出来るコマンド一覧が表示されます。

```dosbatch
実行可能コマンド:
(SELECT|INSERT|UPDATE|DELETE) <式>
DESCRIBE <tablename>
SHOW TABLES
QUIT
HELP
>

```

「SHOW TABLES」コマンドでTwitter内のデータセットがテーブル一覧として表示されます。

```dosbatch
>SHOW TABLES
+------------------------+
| Tables                 |
+------------------------+
| AccountSettings        |
| AdAccounts             |
| AdAvailableAudiences   |
| AdCampaigns            |
| AdFundingInstruments   |
| AdInsights             |
| AdLineItems            |
| AdPromotedTweets       |
| AdStats                |
| DirectMessagesReceived |
| DirectMessagesSent     |
| Favorites              |
| Followers              |
| Following              |
| ListMembers            |
| Lists                  |
| ListSubscribers        |
| Mentions               |
| Retweets               |
| Trends                 |
| Tweets                 |
| TweetStream            |
| Users                  |
+------------------------+
>
```

「SELECT * FROM Tweets WHERE From_User_Id = '709991506229248001' LIMIT 3;」コマンドで該当ユーザがツイートしたデータが表示されます。
(注)TwitterのAPIはRateLimit（一定時間内のAPIリクエスト数の制約）が厳しいので、LIMNITで取得レコード件数を絞り込んでください。一定回数以上、もしくは、SQLのLimitを外して実行すると上限に達する場合があります。その場合は、１５分間経過後に実行ください。

```dosbatch
>SELECT * FROM Tweets WHERE From_User_Id = '709991506229248001' LIMIT 3;
+--------------------+--------------------+-------------+-------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+------+--------------------------------------------------------------------+-----------+----------------+-----------+---------------+---------------------+-----------+--------------+--------------------+--------------------+----------------+-----------------------+-------------------------------+-------------------------+------------------+-----------------+---------------+-------------------------+--------+-----------------------+--------------------+-----------------------+----------------------+--------------------+-------------------------+----------------------------------------------------------------------------+------------+---------------------+---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+
| ID                 | IDLong             | SearchTerms | Created_At                    | Text                                                                                                                                  | Lang | Source                                                             | Favorited | Favorite_Count | Retweeted | Retweet_Count | Retweeted_Status_Id | Truncated | Filter_Level | Possibly_Sensitive | Withheld_Copyright | Withheld_Scope | Withheld_In_Countries | Contributors                  | Coordinates_Coordinates | Coordinates_Type | Place_Full_Name | Place_Country | Current_User_Retweet_Id | Scopes | In_Reply_To_Status_Id | From_User_Id       | From_User_Screen_Name | From_User_Name       | From_User_Location | From_User_Profile_URL   | From_User_Profile_Image_Url                                                | To_User_Id | To_User_Screen_Name | User_Mentions                   | URLs                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | Hashtags                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | NextPageToken      |
+--------------------+--------------------+-------------+-------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+------+--------------------------------------------------------------------+-----------+----------------+-----------+---------------+---------------------+-----------+--------------+--------------------+--------------------+----------------+-----------------------+-------------------------------+-------------------------+------------------+-----------------+---------------+-------------------------+--------+-----------------------+--------------------+-----------------------+----------------------+--------------------+-------------------------+----------------------------------------------------------------------------+------------+---------------------+---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+
| 951595436283895808 | 951595436283895808 | NULL        | 2018-01-12T08:23:26.000+09:00 | なぜポストREST APIが求められるのか？　REST APIがカバーできない2つの要因とその対策 - Morning Girl
#REST #webapi #api #odata #openapi #graphql
https://t.co/8WkA0kKsje | ja   | <a href="http://twitter.com" rel="nofollow">Twitter Web Client</a> | false     | 1              | false     | 1             | NULL                | false     | NULL         | false              | NULL               | NULL           | NULL                  | <contributors></contributors> | NULL                    | NULL             | NULL            | NULL          | NULL                    | NULL   | NULL                  | 709991506229248001 | CDataJapan            | CData Software Japan | 宮城 仙台市             | https://t.co/fA16p3ueQG | http://pbs.twimg.com/profile_images/709992802378190848/SRqZpTot_normal.jpg | NULL       | NULL                | <user_mentions></user_mentions> | <urls>
  <Row>
    <url>https://t.co/8WkA0kKsje</url>
    <expanded_url>http://kageura.hatenadiary.jp/entry/2018/01/11/%E3%81%AA%E3%81%9C%E3%83%9D%E3%82%B9%E3%83%88REST_API%E3%81%8C%E6%B1%82%E3%82%81%E3%82%89%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%8B%EF%BC%9F_REST_API%E3%81%8C%E3%82%AB%E3%83%90%E3%83%BC%E3%81%A7%E3%81%8D</expanded_url>
    <display_url>kageura.hatenadiary.jp/entry/2018/01/…</display_url>
    <indices>110</indices>
    <indices>133</indices>
  </Row>
</urls> | <hashtags>
  <Row>
    <text>REST</text>
    <indices>66</indices>
    <indices>71</indices>
  </Row>
  <Row>
    <text>webapi</text>
    <indices>72</indices>
    <indices>79</indices>
  </Row>
  <Row>
    <text>api</text>
    <indices>80</indices>
    <indices>84</indices>
  </Row>
  <Row>
    <text>odata</text>
    <indices>85</indices>
    <indices>91</indices>
  </Row>
  <Row>
    <text>openapi</text>
    <indices>92</indices>
    <indices>100</indices>
  </Row>
  <Row>
    <text>graphql</text>
    <indices>101</indices>
    <indices>109</indices>
  </Row>
</hashtags> | 951595436283895807 |
| 950940273659424769 | 950940273659424769 | NULL        | 2018-01-10T13:00:03.000+09:00 | 昨年のPV No.1 ナレッジ記事は、「DynamoDB Data をTableau でビジュアライズ」。
https://t.co/nSQBElKHye                                                         | ja   | <a href="http://twitter.com" rel="nofollow">Twitter Web Client</a> | false     | 0              | false     | 0             | NULL                | false     | NULL         | false              | NULL               | NULL           | NULL                  | <contributors></contributors> | NULL                    | NULL             | NULL            | NULL          | NULL                    | NULL   | NULL                  | 709991506229248001 | CDataJapan            | CData Software Japan | 宮城 仙台市             | https://t.co/fA16p3ueQG | http://pbs.twimg.com/profile_images/709992802378190848/SRqZpTot_normal.jpg | NULL       | NULL                | <user_mentions></user_mentions> | <urls>
  <Row>
    <url>https://t.co/nSQBElKHye</url>
    <expanded_url>http://www.cdata.com/jp/kb/tech/dynamodb-odbc-tableau.rst</expanded_url>
    <display_url>cdata.com/jp/kb/tech/dyn…</display_url>
    <indices>54</indices>
    <indices>77</indices>
  </Row>
</urls>                                                                                                                                                                                                           | <hashtags></hashtags>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 950940273659424768 |
| 950938702959661056 | 950938702959661056 | NULL        | 2018-01-10T12:53:49.000+09:00 | 昨年のPV No.1 ナレッジ記事は、「DynamoDB Data をTableau でビジュアライズ」。
#dynamodb #tableau #odbc #NoSQL
https://t.co/nSQBElKHye                        | ja   | <a href="http://twitter.com" rel="nofollow">Twitter Web Client</a> | false     | 0              | false     | 1             | NULL                | false     | NULL         | false              | NULL               | NULL           | NULL                  | <contributors></contributors> | NULL                    | NULL             | NULL            | NULL          | NULL                    | NULL   | NULL                  | 709991506229248001 | CDataJapan            | CData Software Japan | 宮城 仙台市             | https://t.co/fA16p3ueQG | http://pbs.twimg.com/profile_images/709992802378190848/SRqZpTot_normal.jpg | NULL       | NULL                | <user_mentions></user_mentions> | <urls>
  <Row>
    <url>https://t.co/nSQBElKHye</url>
    <expanded_url>http://www.cdata.com/jp/kb/tech/dynamodb-odbc-tableau.rst</expanded_url>
    <display_url>cdata.com/jp/kb/tech/dyn…</display_url>
    <indices>87</indices>
    <indices>110</indices>
  </Row>
</urls>                                                                                                                                                                                                          | <hashtags>
  <Row>
    <text>dynamodb</text>
    <indices>54</indices>
    <indices>63</indices>
  </Row>
  <Row>
    <text>tableau</text>
    <indices>64</indices>
    <indices>72</indices>
  </Row>
  <Row>
    <text>odbc</text>
    <indices>73</indices>
    <indices>78</indices>
  </Row>
  <Row>
    <text>NoSQL</text>
    <indices>79</indices>
    <indices>85</indices>
  </Row>
</hashtags>                                                                                                                                                                                                    | 950938702959661055 |
+--------------------+--------------------+-------------+-------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+------+--------------------------------------------------------------------+-----------+----------------+-----------+---------------+---------------------+-----------+--------------+--------------------+--------------------+----------------+-----------------------+-------------------------------+-------------------------+------------------+-----------------+---------------+-------------------------+--------+-----------------------+--------------------+-----------------------+----------------------+--------------------+-------------------------+----------------------------------------------------------------------------+------------+---------------------+---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+
>
>
```

本コンソールアプリケーションを終了したい場合は「QUIT」コマンドを入力してください。
JavaのコンソールアプリケーションからTwitterのデータを取得することが出来ました。