Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

【JavaScript活用】QiitaAPIでバイク好きがいるか調べてみた

バイクが好き。Harley-Davidsonが好き。なんならその中でもスポーツスターが好き。
愛車はHarley-Davidson XL883R 2007年モデル。白いボディに一目惚れ!
社会人として13年間事務部門で育ってきた30代が人事異動をきっかけにSE目指してスタートを切りました!(Microsoft製品(Access、Excel)を使ったEUCツールの開発経験あり。)

背景・目的

QiitaAPI、JavaScripttを習得するにあたり、バイク好きがどれくらいいるかを調べることにしました。
Qiitaの中にバイク関連の記事(タグ、キーワード)はあるのか?バイクをフォローしているバイク好きな人はどれくらいいるのか?以下【検索するタグおよびキーワード】で【処理】を実行することにします。

【検索するタグおよびキーワード】
 ・bike
 ・バイク
【処理】
 ・タグが設定された記事数をそれぞれ取得
 ・キーワードが含まれた記事のタイトルとURLをそれぞれ10件ずつ一覧化
 ・タグのフォロワー数をそれぞれ取得

環境、言語等

・Visual Studio Code
・Qiita API
・JavaScript
・Node.js

処理コードおよび処理結果

1.各種定数の定義と値の代入

キーワードなど色々なところで使用するので、定数(変数)を定義します。(今回は定数のみ使用)
一か所変えればすべて変わる!定数(変数)はとても便利です。
今回は[bike][バイク]の二種類のキーワードを使うことにします。
[バイク]は日本語のため、エンコード処理をする必要があります。
モジュール内でエンコードとデコードの切り替え方法が解決できなかったので、最初からエンコードして代入することにします。
★参考:JavaScriptにおける変数と定数について
★参考:encodeURIComponentが世界基準だと誤解してた話

const axios = require('axios'); 
const accessT = '自分のアクセストークンを指定'
const NameEnglish = 'bike'
const NameJapan = 'バイク'
const NameJapanEn = encodeURIComponent('バイク')

2.[bike]と[バイク]のタグを含む記事数取得

[bike]と[バイク]のタグを含む記事数をそれぞれ取得します。

★参考:初心者がQiitaのAPIにアクセスして、初心者についてのタグを考察してみた(その①)

処理コード

「1.各種定数の定義と値の代入」で設定した定数を使いまわします。

const axios = require('axios'); 
const accessT = '自分のアクセストークンを指定'
const NameEnglish = 'bike'
const NameJapan = 'バイク'
const NameJapanEn = encodeURIComponent('バイク')

//関数mainを定義 ★[bike][バイク]タグを含む記事の数
async function main() {
  //bike
  let response1 = await axios.get('https://qiita.com/api/v2/tags/' + NameEnglish, {
      headers: {
      'Authorization': `Bearer ` + accessT
    }
  });
  console.log('1[' + NameEnglish + ']タグを含む記事数:'+ response1.data.items_count); 
  //バイク
  let response2 = await axios.get('https://qiita.com/api/v2/tags/' + NameJapanEn, {
      headers: {
      'Authorization': `Bearer ` + accessT
    }
  });
  console.log('2[' + NameJapan +']タグを含む記事数:'+ response2.data.items_count);
}

main();

実行結果

1[bike]タグを含む記事数:3
2[バイク]タグを含む記事数:12

3.[bike]と[バイク]のキーワードが含まれている記事の一覧化

[bike]と[バイク]のキーワードが含まれている記事をタイトルとURLを取得します。
「1.各種定数の定義と値の代入」で設定した定数を使用します。
100件を取得しようと考えていましたが、出力した後にQiitaへの記載が大変だったので10件へ変更しました。
CSV等に書き出ししたかったのですが、参考に見た記事が難しかったので諦め、Qiita上に貼ると表になる形式で出力していきます。
★参考:きのこの山 VS たけのこの里 あなたはどっち派?を調べてみた
★参考:JavaScriptとQiitaAPIで取得した人気タグ情報をplotlyで散布図表示してみる

処理コード

「1.各種定数の定義と値の代入」で設定した定数を使いまわします。

const axios = require('axios'); 
const accessT = '自分のアクセストークンを指定'
const NameEnglish = 'bike'
const NameJapan = 'バイク'
const NameJapanEn = encodeURIComponent('バイク')


//関数mainを定義 ★[bike][バイク]キーワードを含む記事10件分TitleとURL取得
async function main() {
  //bike
  let response1 = await axios.get('https://qiita.com/api/v2/items?per_page=10&page=1&query='+ NameEnglish, {
    headers: {
      'Authorization': `Bearer ` + accessT
    }
  });
  console.log('| [' + NameEnglish + ']キーワードを含む記事のtitle | URL |')
  console.log('|:-|:-|')
  for (let i = 0; i < response1.data.length; i++) {
    console.log('|' + response1.data[i].title + '|' + response1.data[i].url +'|');
  }
  //バイク
  let response2 = await axios.get('https://qiita.com/api/v2/items?per_page=10&page=1&query='+ NameJapanEn, {
    headers: {
      'Authorization': `Bearer ` + accessT
    }
  });
  console.log('| [' + NameJapan + ']キーワードを含む記事のtitle | URL |')
  console.log('|:-|:-|')
  for (let i = 0; i < response2.data.length; i++) {
    console.log('|' + response2.data[i].title + '|' + response2.data[i].url +'|');
  }
}

main();

実行結果

[bike]キーワードを含む記事一覧(10件)

[bike]キーワードを含む記事のtitle URL
書籍「ユースケースで学ぶDataiku-自転車シェアリングサービスの利用パターン分析-」告知 https://qiita.com/ayoyo/items/7489fc42c7127eb07d82
「自動化ツール」活用は、これからのデータ分析スキル向上の鍵だ!(と思う) https://qiita.com/hima2b4/items/73d8053574ea3e85e150
It's too late, your data has been compromised https://qiita.com/Sovai/items/70961e362491de53d2a5
[初心者向け] BootstrapのCarouselを暗くして背景として使う https://qiita.com/daisuke114/items/e91ec77bd3fec9165708
DynamoDB入門編(チュートリアル実施) https://qiita.com/kouji0705/items/7750d35eaaf2e53529c2
道路安全 自己適応システムの安全分析。安全(25) https://qiita.com/kaizen_nagoya/items/449ccda6821efeff574f
自動車安全資料を仮訳してみた。分析はこれから。安全(27) https://qiita.com/kaizen_nagoya/items/c28c707ef226e65b780e
OpenStructを用いる オブジェクト指向設計実践ガイドより https://qiita.com/RyomaKaneko/items/455808398c770ede3abb
モジュールを適切に使う オブジェクト指向設計実践ガイド https://qiita.com/RyomaKaneko/items/17670b8975099b039cc5
コンポジション オブジェクト指向設計実践ガイドより https://qiita.com/RyomaKaneko/items/b2733e5818285a37634a

[バイク]キーワードを含む記事一覧(10件)

[バイク]キーワードを含む記事のtitle URL
バイクで走るタイムリミットをLINE_BotとWeb_APIを組み合わせて実装してみた~ https://qiita.com/tanakahiroki/items/e436a80d7d25a6421ca9
NODE-REDでビジュアルプログラミング辞書型チャットボット人工無能APIを作って遊ぼ https://qiita.com/iwaxse0430/items/985fc79b9305ee469731
PICと気圧センサで高度計を作成する https://qiita.com/keitanak/items/c40ea7706fd43014d2e1
AWS Cognito にトライしてみた https://qiita.com/meowmeowcats/items/212ce109254647be609d
Railsポートフォリオ【Tamari-Ba】についてまとめてみた https://qiita.com/vit_udon_husqy/items/f87ca0bdb4b23f0449e9
データサイエンティストの仕事~日立のデータサイエンティストに聞いてみた!~シリーズ3~ https://qiita.com/KH_MOON/items/b8f21589547fbd21fe12
Javaマルチスレッド https://qiita.com/syouekiko/items/e8f94de918d39d34d7e2
DB設計のセオリーである正規形を自分なりにまとめてみた https://qiita.com/play-life/items/1f2a057b74207629da74
【Google Cloud Day'21】「製造業における Google Cloud を活用した全社データ利活用推進の進め方とは?」を視聴して https://qiita.com/Mune_robo/items/1be99f70b32adfa7d325
Slackにバイク川崎バイクを導入する【Python/Slackbot/Mecab】 https://qiita.com/pepperland_sk/items/ffe361b3bf3abf02ef58

4.[bike]と[バイク]タグのフォロー人数取得

処理コード

「1.各種定数の定義と値の代入」で設定した定数を使いまわします。

const axios = require('axios'); 
const accessT = '自分のアクセストークンを指定'
const NameEnglish = 'bike'
const NameJapan = 'バイク'
const NameJapanEn = encodeURIComponent('バイク')


//関数mainを定義 ★[bike][バイク]タグをフォローしている人の数
async function main() {
  //bike
  let response1 = await axios.get('https://qiita.com/api/v2/tags/' + NameEnglish, {
    headers: {
      'Authorization': `Bearer ` + accessT
    }
  });
  console.log('1[' + NameEnglish + ']タグのフォロワー数:'+ response1.data.followers_count);
 //バイク
  let response2 = await axios.get('https://qiita.com/api/v2/tags/' + NameJapanEn, {
    headers: {
      'Authorization': `Bearer ` + accessT
    }
  });
  console.log('2[' + NameJapan +']タグのフォロワー数:'+ response2.data.followers_count);
}

main();

実行結果

1[bike]タグのフォロワー数:1
2[バイク]タグのフォロワー数:0

考察

・以下2点のことからバイクが好きな人は存在した。
 ・一見関係ないようなタイトルでも、記事を見に行くとバイクが好きと記載している記事を複数発見。
 ・バイクに関係したツール開発などをしている記事を複数発見。
・タグが活用されていない。
・タグ上限が5個までとなるとバイクを入れ込むことが難しい可能性がある。
・キーワード検索では[bike][バイク]を含むものと指定したため自転車系の内容もヒットした。
・欲しい記事が取得できていない。

苦労したこと

定数(変数)の設定

どこまで定数(変数)にするか悩みました。
Microsoft製品(Access、Excel)を使ったEUCツールの開発では、定数・変数大好き人間で、他の人が解析する際に困るという中身だったので、便利だけどやりすぎると解析やメンテナンスが大変になってしまうので、ベストな使い方になっているのか悩みました。が、悩みすぎて「えいやっ!」と終了にしました。

利用制限

始めてJavaScript、Node.js、APIを実行したため、最初から試し書きしては叩いてを繰り返しエラー連発し、直しては叩いてを繰り返したところ、1時間に60回をオーバーしました。
認証していないと1時間に60回までしか叩けないということの意味をきちんと理解していませんでした。
参考文書をもとに認証したらサクサク進みました。
★参考:よそ様の情報を簡単に参照できるWEBAPIが本当に簡単なのか体験してみた。

利用制限
認証している状態ではユーザごとに1時間に1000回まで、認証していない状態ではIPアドレスごとに1時間に60回までリクエストを受け付けます。
Qiita API v2の仕様より抜粋

さいごに

バイクに関係するテーマの記事を投稿している方もタグを使っていないようです。
そして、英語圏ではバイクのことは[Motorcycle]ということなので、どちらが良いのでしょうか?
投稿する際はタグを活用したいと思いましたが[bike][Motorcycle]で悩みました。
今回は[bike]タグを使いますが、適切なタグを設定できるよう頑張ります。

記事の書き方で参考にしたURL

記事名 URL
Qiita記事作成方法 初心者の備忘録 https://qiita.com/U-MA/items/996ae933ae94c5711883
Qiita 記事の書き方 https://qiita.com/wdwd5454/items/7d8db521c5c0d1f570f6
Markdown記法 チートシート https://qiita.com/Qiita/items/c686397e4a0f4f11683d
良い記事を書くためのガイドライン https://help.qiita.com/ja/articles/qiita-article-guideline
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?