Qiitaに投稿した記事情報（View数など）をHULFT SquareのREST接続でとったら簡単だった

# はじめに
こんにちは、すぎもんです:smiley:

Qiitaに記事投稿をしていると、やはり気になるのが「View数」です。
記事がどれだけの人に読んでいただけているのか、どういった記事がたくさん読まれるのか、日々試行錯誤する上でも、やはり記事のView数は把握しておきたいものです。

# 今回やること

Qiita管理画面からも「View数」の確認はすぐにできますが、複数の記事を１つ１つ確認するのは少々時間がかかります。そこで、今回はHULFT Squareから「Qiita API」を使って、記事情報を取得していきます。
HULFT Squareから公式APIドキュメントに記載された内容を設定していくことで簡単にAPI呼び出しができます。また。取得した情報をHULFT SquareのETL機能において閲覧しやすい形式に加工することもできます。
早速やってみましょう！

:::note info
「今回やること」は以前に投稿したDataSpider版と同一になります。
[Qiitaに投稿した記事情報（View数など）をDataSpiderのREST接続でとったら簡単だった](https://qiita.com/sugimon/items/294187dbee3ef5a27fe5)

検証手順におけるQiitaの設定は上記記事と手順が同一のため、本記事では省略致します。
＜Qiitaの設定＞
①Qiita APIの確認
Qiita APIの公式ドキュメント](https://qiita.com/api/v2/docs)
使用するAPI：認証中のユーザーの記事の一覧を作成日時の降順で返してくれるAPI
    　GET /api/v2/authenticated_user/items
②Qiitaでアクセストークンを取得する

:::
# 検証手順

＜HULFT Squareの設定＞
1.ストレージの準備
2.コネクションの設定
3.プロジェクトの作成

## HULFT Squareの設定
### 1.ストレージの準備
今回はHULFT Squareのストレージの所定ディレクトリーにView数の取得結果ファイルを保存していきます。
「ストレージ」から「新しいディレクトリー」をクリック。
`指定のワークスペース/Qiita/Output`の階層のディレクトリーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a3d3a3ed-f440-a37c-487d-b802c2240b49.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e18f60e6-2ef5-811f-17ef-397559bc1ec6.png)

### 2.コネクションの設定

HULLFT SquareからQiita APIへの接続設定である「コネクション」を作成していきます。

「HULFT INTEGRATE」-「コネクション」から「新規追加」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/649edc5d-c9f9-0f83-375a-5e532c976321.png)



 「コネクター」-「REST」、「種類」-「REST接続」を選択し「次へ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/72bd16c9-3365-2c60-f408-f955fa25002c.png)

 「名前」は`Qiita接続用`とし「次へ」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/7b49bc59-76d1-a50a-ec84-1a44afb459ff.png)
 
「URL」に`https://qiita.com/api/v2/`を設定し、「接続テスト」をクリック。
「接続テスト」の成功を確認後、「OK」をクリックし、「次」へをクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0266058a-c59c-8c36-0184-5dad9c6e8aed.png)

:::note
Qiita APIに接続するためのURL（エンドポイント）となります。使用するAPIに応じて、ここで設定した「URL」の後に続く部分を設定し、最終的なWeb APIのエンドポイントを設定します。
:::

:::note warn
「接続テスト」はHULFT Squareからの接続ができるかどうかを確認するため実施しましょう。
:::

任意のプロファイルを選択し、「次」へをクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6e997af9-cd64-3eeb-ac64-3a68948267bd.png)

:::note warn
プロファイルは実行環境を定義する設定です。「開発用」「本番用」等適切な実行環境に紐付けるプロファイルを選択する必要があります。
:::

「完了」をクリックし、「コネクションの設定」を完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/15e1af4d-dfa1-f199-3286-75b983e8fbec.png)


### 3.プロジェクトの作成
QiitaのView数を取得するスクリプトを作成していきます。
まず、デプロイの単位であるプロジェクトを作成します。

「名前」に任意のプロジェクト名、今回は`Qiita`を設定
「スクリプトを作成」に`✓`
「スクリプト名」に今回は`QiitaVIEW数取得`を設定し「次」へをクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/44cc090a-73bd-dd3f-d211-d5fe6c405538.png)

「完了」をクリックするとデザイナ画面が起動されます。
以降はデザイナ画面で`QiitaVIEW数取得`スクリプトを作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1c2e15e0-2705-368a-0748-912c79434d78.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6ccf02fa-326c-988c-e0bf-1636f5c8985b.png)

#### 1.GET実行処理の設定
まずは、必須設定タブの設定をします。
先のセクションで作成した`Qiita接続用`のコネクションであるQiita接続用を設定しましょう。「パス」には、使いたいAPIのエンドポイントの残りの部分である`/atuthenticated_user/items`を設定します。

＜クエリパラメータ＞
[Qiita API](https://qiita.com/api/v2/docs)に記載がある通り、GET /api/v2/authenticated_user/items　では、パラメータ設定が可能です。pageとper_pageの概念理解で他の方の記事やらも確認しましたが、1pageに100要素（＝記事）を取得できるようで、私の設定だと1×100で、100記事分の情報が取得できそうです。
つまり最大設定値である100を両者に設定すると、100×100=10000記事取得できる、ということですね。
　　・page　　　：　`1`　　・per_page　：　`100`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/803166db-88bb-bca7-a0ff-88052015702c.png)

次は、レスポンス設定タブを設定します。下記の通り入力します。
　　・データ出力先　　　　　　　　　　：　`JSON`
　　・XMLとして不正な文字を削除する　：　`✓`
　　・自動でリダイレクトする　　　　　：　`✓`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/918c2c9a-8973-f7ca-bc17-767d7cbd983b.png)

更に、「JSONファイルを指定して出力スキーマを設定」のリンクを押下して、レスポンスとして受け取るJSONファイル定義を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/594d608d-40e5-efc3-0721-45445858263e.png)

:::note warn
<strong>★レスポンス指定するJSONファイルの準備について★</strong>
下記2つのいずれかの方法で、私はJSONファイルを用意しています。
①使いたいAPI自体をCurlコマンドで事前に実行してみて、JSONファイルを作成。
②公式APIドキュメントに記載されたJSONファイルの例をコピーしてJSONファイルを手動作成。
:::

今回は②で作成したファイルを指定しました。

```QiitaView.json
[
  {
    "rendered_body": "<h1>Example</h1>",
    "body": "# Example",
    "coediting": false,
    "comments_count": 100,
    "created_at": "2000-01-01T00:00:00+00:00",
    "group": {
      "created_at": "2000-01-01T00:00:00+00:00",
      "description": "This group is for developers.",
      "name": "Dev",
      "private": false,
      "updated_at": "2000-01-01T00:00:00+00:00",
      "url_name": "dev"
    },
    "id": "c686397e4a0f4f11683d",
    "likes_count": 100,
    "private": false,
    "reactions_count": 100,
    "stocks_count": 100,
    "tags": [
      {
        "name": "Ruby",
        "versions": [
          "0.0.1"
        ]
      }
    ],
    "title": "Example title",
    "updated_at": "2000-01-01T00:00:00+00:00",
    "url": "https://qiita.com/Qiita/items/c686397e4a0f4f11683d",
    "user": {
      "description": "Hello, world.",
      "facebook_id": "qiita",
      "followees_count": 100,
      "followers_count": 200,
      "github_login_name": "qiitan",
      "id": "qiita",
      "items_count": 300,
      "linkedin_id": "qiita",
      "location": "Tokyo, Japan",
      "name": "Qiita キータ",
      "organization": "Qiita Inc.",
      "permanent_id": 1,
      "profile_image_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-image-store/0/88/ccf90b557a406157dbb9d2d7e543dae384dbb561/large.png?1575443439",
      "team_only": false,
      "twitter_screen_name": "qiita",
      "website_url": "https://qiita.com"
    },
    "page_views_count": 100,
    "team_membership": {
      "name": "Qiita キータ"
    },
    "organization_url_name": "qiita-inc",
    "slide": false
  }
]

```

次に、ヘッダ設定タブの設定です。下記の通り、設定します。
　・名前　：　`Content-Type`　　・値　：　`application/json`
　・名前　：　`Authorization`　 ・値　：　`Bearer XXX(Qiita管理画面から発行したアクセストークン)`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/edecc5ee-fbaf-e6f1-fefa-98feddf5edb9.png)

以上で、GET実行の設定は完了です。

#### 2.マッピングの設定（入力元の確認）
デザイナ画面右側にある「ツールパレット」から「変換」>「基本」>「マッピング」をデザイナ中央部分にドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/063db364-42b6-ae76-4ceb-d0553bb87e78.png)
処理アイコンをただ並べた状態だと下記のような状態です。
各処理アイコンを線でつなぎ、データと処理フローを作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0080d0fe-f77d-0508-e3dd-81a67c289d16.png)
「GET実行」アイコンをmappingアイコンにドラッグ＆ドロップすると、下記のポップアップが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0bf7662f-e70b-9cbf-6633-e186220e321a.png)
「プロセスフローとデータフローを引く」に`✓`してOKを押下すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5f66dfab-bbb9-bb76-bb25-5dd80d6c6a46.png)
処理アイコンがつながりました。mappingアイコンをダブルクリックしてみましょう。
「入力元」の赤枠部分にJSON定義が作成されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3369e1b0-1290-234c-747b-999194edb742.png)
JSONファイルとして取得した記事情報の中のそれぞれの項目については、[Qiita APIドキュメント]()に記載があるので、ここから必要な情報を選択して、右側の「出力先」に渡す設定をしていきます。

#### 3.CSVファイル書き込み処理の設定
APIで取得した記事情報の中から必要な項目を選択して、CSVファイルを作成します。

デザイナ画面右側のツールパレットから「ファイル」>「CSV」>「CSVファイル書き込み」アイコンをデザイナ中央にドラッグ＆ドロップします。マッピングアイコンからフローをつなぎます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/03e369c0-3c7b-a27c-486a-93a21ecda883.png)
まずは、必須設定タブです。下記の通りに設定します。
　　・名前　　　　：　`記事情報をCSVに出力`
　　・入力データ　：　`mapping`
　　・ファイル　　：　`/設定した出力先のディレクトリー/${集計年月}_Qiita記事_${記事件数}件.csv`
＜列一覧＞
「追加」を押下して、「列名」に出力したい必要項目の定義をします。今回は下記の6項目を出力してみます。
　　・作成年月日　　・記事タイトル　　・View数　・いいね数　・ストックス　・タグ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/05685c92-a3d3-6d7f-ce36-9a718973cde3.png)

ファイル名に、「集計年月」と「記事件数」を付与するために、「集計年月」と「記事件数」というスクリプト変数を作成しておきます。スクリプト変数への値の設定は、次のmapping設定（出力先の設定）の中でします。

:::note info
スクリプト変数を使って、ファイル名に「処理日時」や「データ件数」などを付与できます。スクリプト変数は、あらかじめ必要なものを作成しておきます。
:::

次に、書き込み設定タブです。
「上書き」と「1行目に列名を挿入」に`✓`を入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/f528567f-c748-fc5b-6f7b-2f54d933af94.png)

以上で、CSV書き込みの設定は完了です。

#### 4.マッピングの設定（出力先の設定）
今回のマッピング設定は下記の通りです。
（細かい！ように見えますが、基本的なアイコンなど簡単な設定のみです。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/db26d324-4a5a-089f-7436-f28c9f2d1e59.png)

まずは、取得した記事情報の分だけ、処理を読み取り書き込む繰り返しの処理を行う設定です。
ツールパレットの「繰り返し」>「基本」>「単純な繰り返し」アイコンを中央にドラッグ＆ドロップします。入力元の「element」と出力先の「row」を線でつなぎ、"入力データ件数分"書き込み処理を繰り返す設定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/252b617b-f935-95d2-15db-58652eed4421.png)

次に、それぞれの出力先の項目への設定をみていきましょう。

<strong>■集計年月</strong>
月初1日にスクリプトを実行したいので「前月のデータとして集計情報を出力」します。
つまり、スクリプト変数「集計年月」に、現在日時の前月の値を設定したいと思います。

ツールパレットの「日付」>「基本」>「現在日時」アイコンと、「数値」>「基本」>「数値定数」アイコンに「`-1`」を設定したものを、「日付」>「演算」>「月を増減」アイコンにつなぎます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e5e8ca41-dcd6-98a2-00b7-297c6a6fce46.png)
次に、「文字列」「日付」「日時フォーマッティング」アイコンに繋げます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e68b5bff-73d8-05f0-65fc-1b68179101df.png)
日時フォーマッティングは、年月だけで良いので「yyyyMM」と指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/acf0a61c-933a-292e-be88-dd47b0e2e325.png)

最後に、スクリプト変数「集計年月」に線をつないで完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c034f4a8-e3ad-badd-7621-33366dc61e93.png)

<strong>■作成年月日</strong>
記事を作成した日時情報「created_at」を出力先のスクリプト変数「作成年月日」につなげます。[Qiita APIドキュメント](https://qiita.com/api/v2/docs)の記載例に「Example: "2000-01-01T00:00:00+00:00"」と書いてあったので、「先頭10文字yyyy-MM-dd」を使います。ツールパレットから「文字列」>「関数」>「左文字列」で「10」を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c8f2013f-d4bc-9ed4-803d-4fc323d5bfbd.png)


入力元「created_at」→「左文字列」アイコン→出力先の項目「作成年月日」に線をつなぎます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1590b807-1443-eaa6-1931-fc5b2d9305e6.png)
下記項目はそのまま入力元から出力先に情報を渡すよう、線をつなぎます。
| 入力元 | 出力先 |
|:-----------|:------------|
| title | 記事タイトル |
| page_views_count | View数 |
| likes_count | いいね数 |
| stocks_count | ストック数 |
| tags | タグ |
| items_count | スクリプト変数「記事件数」 |

以上でマッピング設定は完了です。

# 検証結果確認
全てのアイコンをつないだ完成スクリプトは下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1cf2f59c-8538-8728-2061-3ed169c3b53d.png)

:::note info

今回は`記事情報をCSVに出力`前に記事を作成年月日降順に並び替えるために「ソート処理」を挿入しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/19da2ba0-2876-e493-4eaa-5c269d7cc200.png)


:::

処理を実行して、出力ファイルの結果をみてみましょう。

スクリプトが正常終了し、指定したディレクトリーに指定した名前でファイルが作成されています。
現在日時が「20240628」なので、前月の「202405」が設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0c66c3ec-b14d-883a-a9f7-c527181d48fc.png)

また、記事投稿件数も「83件」で正しい値がファイル名に設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/604359de-e53c-e09c-0368-bd8b0d8f8c0a.png)


ファイルの中身を見てみましょう。
指定した項目が正しく出力されています。View数やいいね数も正しく取れていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/45db564b-0c73-a079-c256-4d295de68cd3.png)

# 最後に
いかがでしたでしょうか。HULFT SquareのREST接続でView数を含むQiita投稿記事に関する情報が取得できました。
HULFT Squareでは日時のスケジュールジョブの設定で毎月1日に前月分の取得結果を自動取得することやSlacK等に通知を送ることも実現可能です。

ここまで読んでいただきありがとうございました。それでは、また！