Qiita APIに悪戦苦闘。応用情報に合格できる記事を検索。

# 応用情報処理試験に苦戦した過去
私は応用情報処理試験に２度不合格になった。
難易度が高くないとはいえ、過去様々な資格試験に一発で合格してきたのに、である。
「ガラスのハート」と「鑿の心臓」を併せ持つ私は、SE向いてないのでは、、？と、今まで培ってきた自信を失った。
私みたいに自信を失う人が今後現れないように、Qittaに掲載されている応用情報処理対策のおすすめ記事を、Qitta APIを用いて検索しようと思う。

### 環境
Heroku環境上で**Node-RED**を使用

Node-REDを生まれて初めて使用した。恥ずかしながらAPIも初めて使用した。
そんな初心者の格闘も、合わせて楽しんでいただけたら、と思う。

# 兎にも角にもやってみる
まずはNode-RED、Qitta APIに慣れるため、シンプルなフローでAPIを叩いてみた。

<img width="500" alt="スクリーンショット 2022-10-15 22.36.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884816/1199c4b8-c771-b61b-6bc8-aea500b90938.png">

```
https://qiita.com/api/v2/items?page=1&per_page=30&query=応用情報試験
```
```
[{"id":"e352b7a34932f8da","type":"http request","z":"1d6b86e21476136a","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://qiita.com/api/v2/items?page=1&per_page=30&query=応用情報試験","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"x":350,"y":140,"wires":[["2ea44688113b860b"]]}]
```
こうすれば応用情報試験に関する記事が検索できて万々歳だと思っていた。
しかし、応用情報処理という文言が記事に含まれる、情報処理試験対策とは関係のない記事も出力された。

# 少しずつ改善していく
下記の記事を参考にし、フローを改善していく。

https://qiita.com/kijibato/items/1f8b86fc5e7cd3b0db17

まず、queryだが、titleに応用情報試験が入っている記事に絞る。
また、合格に近づける良記事の指標として、**ストック数**を使用する。
```
https://qiita.com/api/v2/items?page=1&per_page=30&query=title%3A応用情報試験&sort=stocks_count
```
```
[{"id":"1d6b86e21476136a","type":"tab","label":"フロー 1","disabled":false,"info":"","env":[]},{"id":"c5b4713b4cdf05df","type":"inject","z":"1d6b86e21476136a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"inject","payloadType":"str","x":170,"y":140,"wires":[["e352b7a34932f8da"]]},{"id":"e352b7a34932f8da","type":"http request","z":"1d6b86e21476136a","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://qiita.com/api/v2/items?page=1&per_page=30&query=title%3A応用情報試験&sort=stocks_count","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"x":350,"y":140,"wires":[["f00bfd4d21a3faf6"]]},{"id":"948a5ce6c8774e0c","type":"function","z":"1d6b86e21476136a","name":"function02","func":"let array_data01 =  msg.payload;\nlet title=[];\n\n//指定した回数分のタイトルを取得\nfor(let i=0;i<10;i++){\n    title[i] = array_data01[i].title;\n}\nmsg.title = title;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":300,"wires":[["3cad32f5d53b7d35"]]},{"id":"f00bfd4d21a3faf6","type":"function","z":"1d6b86e21476136a","name":"function01","func":"let array_data =  msg.payload;\nlet stocks_count=[];\n\n//記事ストック数を算出\nfor(let i=0;i<13;i++){\n    stocks_count[i] = array_data[i].stocks_count;\n}\nmsg.stocks_count =  stocks_count;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":410,"y":220,"wires":[["2ea44688113b860b"]]},{"id":"3cad32f5d53b7d35","type":"debug","z":"1d6b86e21476136a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":610,"y":360,"wires":[]},{"id":"2ea44688113b860b","type":"debug","z":"1d6b86e21476136a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":610,"y":140,"wires":[]}]
```

これで、記事のタイトルに応用情報試験が入っている記事を出力させることができた。
しかし、ストック数でソートすることを想定して入れたsort=stocks_countがうまく機能しない。

そこで、functionを使用して、ストック数を確認してみることにした。

<img width="400" alt="スクリーンショット 2022-10-15 23.06.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884816/c9e773bf-5c0c-b3a1-983a-d9885f52c1ed.png">

```
#function01
let array_data =  msg.payload;
let stocks_count=[];

//記事ストック数を算出
for(let i=0;i<13;i++){
    stocks_count[i] = array_data[i].stocks_count;
}
msg.stocks_count =  stocks_count;

return msg;
```

結果は以下である。
<img width="200" alt="スクリーンショット 2022-10-15 23.19.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884816/89f380f9-f685-7d53-c592-dce460987069.png">

上記の結果から、**ストック数が10以上**の記事に絞って検索する。また、最終的に見たい結果はタイトルとストック数であるので、それを出力できるよう、functionを設定する。

また、最終的な集計は手作業で実施した（csv出力方法の習得はまた次の機会までの課題とする。）。

◆フロー
<img width="400" alt="スクリーンショット 2022-10-15 23.36.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884816/af7c932e-2d01-3226-eb0d-4917794b36ce.png">
◆JSON形式
```
[{"id":"4d08a5ef2eb210eb","type":"tab","label":"フロー 1","disabled":false,"info":"","env":[]},{"id":"2ad09c421d2bd55b","type":"inject","z":"4d08a5ef2eb210eb","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"inject","payloadType":"str","x":170,"y":140,"wires":[["4febbfe33b16288b"]]},{"id":"4febbfe33b16288b","type":"http request","z":"4d08a5ef2eb210eb","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://qiita.com/api/v2/items?page=1&per_page=30&query=title%3A応用情報試験+stocks%3A%3E10","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"x":350,"y":140,"wires":[["bb582a5433e27c78"]]},{"id":"e04bc316d54072d3","type":"function","z":"4d08a5ef2eb210eb","name":"function02","func":"let array_data01 =  msg.payload;\nlet title=[];\n\n//指定した回数分のタイトルを取得\nfor(let i=0;i<13;i++){\n    title[i] = array_data01[i].title;\n}\nmsg.title = title;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":300,"wires":[["802799123df5a0c8"]]},{"id":"bb582a5433e27c78","type":"function","z":"4d08a5ef2eb210eb","name":"function01","func":"let array_data =  msg.payload;\nlet stocks_count=[];\n\n//記事ストック数を算出\nfor(let i=0;i<13;i++){\n    stocks_count[i] = array_data[i].stocks_count;\n}\nmsg.stocks_count =  stocks_count;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":410,"y":240,"wires":[["e04bc316d54072d3"]]},{"id":"802799123df5a0c8","type":"debug","z":"4d08a5ef2eb210eb","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":470,"y":380,"wires":[]}]
```

```
# function02
let array_data01 =  msg.payload;
let title=[];

//指定した回数分のタイトルを取得
for(let i=0;i<13;i++){
    title[i] = array_data01[i].title;
}
msg.title = title;
return msg;
```
結果はこうなった。

<img width="450" alt="スクリーンショット 2022-10-16 8.57.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884816/be738307-6e9c-74cc-2016-2d6dc867a833.png">

まずまずの結果ではないだろうか。

# 記事を実際に読んでみる
結果として得られた記事数は13であった。
応用情報合格者（ｴｯﾍﾝ）の私が記事を読んでみて、本当におすすめ記事か確認してみる。

、、、なるほど、私も試験前に読んでおけば2回も落ちなくて済んだかもしれない。
多くの記事に、「応用情報処理試験ってどんな試験？」というところが書かれている。

敵を攻略するには、まず敵を知ること。その辺りを丁寧に解説しているところが、良記事と言われる所以なのかもしれない。

あと、記事を読んで思ったのは、
**情報処理試験は過去問が大事！！**
ということである。どの記事も過去問を徹底的に行って、傾向分析をしていた。

私も高度情報試験の合格を目指さなければ行けない立場である。過去問をきちんと活用しようと思う。

# 最後に
今回はQiita APIを用いて応用情報の合格に役立つ記事を検索してみた。
私の拙い記事が、誰かの応用情報合格の一助になれば、感無量である。
私自身のスキルには多くの課題が残っている。今後Qittaに積極的に記事を投稿しようと思うが、そこで私の成長を示していければ、と思う。