やりたいこと
気になったタグでのおすすめ記事がなかなか見つからないので、
特定タグでLGTMの多い記事を抽出できるようにする。
準備
linux上で、jqが使えること。
手順
例でタグは「新人プログラマ応援」としてます。
https://qiita.com/tags/%e6%96%b0%e4%ba%ba%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9e%e5%bf%9c%e6%8f%b4?page=1
step0 タグの記事数を確認
上記リンクより、2021/4/9時点、2609件
QiitaAPIの仕様で100件が最大なので、取得処理が27回必要そう。
step1 ターミナル起動
step2 シェル起動
./get_tags.sh
#!/bin/zsh
# qiitaから対象タグの全記事一覧取得する
for (( i=1; i<=27 ;i++ ))
do
ss="curl 'https://qiita.com/api/v2/tags/新人プログラマ応援/items?page=${i}&per_page=100' | jq '.[] | { likes_count: .likes_count, title: .title, url: .url}' >> tags_all.json"
eval $ss
done
# sort 降順
jq 'sort_by(.likes_count) | reverse' --slurp tags_all.json > ranking_all.json
# end
step3 ファイルをみる
[
{
"likes_count": 9160,
"title": "ロシアの天才ハッカーによる【新人エンジニアサバイバルガイド】",
"url": "https://qiita.com/jacksuzuki/items/b2fa6b44962e73a53d08"
},
{
"likes_count": 5731,
"title": "AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~",
"url": "https://qiita.com/drken/items/fd4e5e3630d0f5859067"
},
{
"likes_count": 4755,
"title": "エンジニアの情報収集法まとめ",
"url": "https://qiita.com/nesheep5/items/e7196ba496e59bb2aa28"
},
...
}
]
Appendix LGTMの件数でフィルターをしたいとき
LGTM>100以上でフィルタの例
jq '.[] | select(.likes_count > 100)' ranking_all.json > ranking_over100.json
修正版シェルスクリプト
- 出力ファイル名にタグ名と日付(YYYY-MM-DDT形式)を追加
- 投稿記事数から取得するページ数計算を追加
(認証なしだと、1時間あたり60APIコールの制限にひっかかりやすくなってます_φ( ̄ー ̄ )
#!/bin/zsh
# 出力ファイル名を設定
TAG_ID='新人プログラマ応援'
DATE_NOW=`date +%Y-%m-%dT`
TAGS_FILE="tags_${TAG_ID}_${DATE_NOW}.json"
RANKINGFILE="ranking_${TAG_ID}_${DATE_NOW}.json"
echo "TAGS_FILE=${TAGS_FILE}, RANKINGFILE=${RANKINGFILE}"
# qiitaから対象タグの記事数を取得する
curl "https://qiita.com/api/v2/tags/${TAG_ID}" | jq '.' > tags_detail.json
ITEM_COUNT=$(jq '. | .items_count' tags_detail.json)
PAGE_COUNT=$(( $(( $ITEM_COUNT + 99 )) / 100 ))
echo "ITEM_COUNT=${ITEM_COUNT}, PAGE_COUNT=${PAGE_COUNT}"
# qiitaから対象タグの全記事一覧取得する
cp /dev/null ${TAGS_FILE} # ファイルを空にしておく
for (( i=1; i<=${PAGE_COUNT} ;i++ ))
do
ss="curl 'https://qiita.com/api/v2/tags/${TAG_ID}/items?page=${i}&per_page=100' | jq '.[] | { likes_count: .likes_count, title: .title, url: .url}' >> ${TAGS_FILE}"
eval $ss
done
# sort 降順
jq 'sort_by(.likes_count) | reverse' --slurp ${TAGS_FILE} > ${RANKINGFILE}
# end
githubレポジトリ
参照リンク
Qiita API v2の仕様
https://qiita.com/api/v2/docs
Qiita API v2の仕様(特定タグの記事リスト)
https://qiita.com/api/v2/docs#get-apiv2tagstag_iditems
jq(manual)
https://stedolan.github.io/jq/manual/
jq コマンドを使う日常のご紹介
https://qiita.com/takeshinoda@github/items/2dec7a72930ec1f658af
eval(man)
https://man7.org/linux/man-pages/man1/eval.1p.html
[メモ] Qiita: 投稿記事の閲覧数をコマンドラインで取得
https://qiita.com/mt08/items/57411d9618725d58a41f
PythonでQiita APIを叩いて初心者向け記事を一覧取得したあと、神記事たちを参拝していく
https://qiita.com/yaboxi_/items/97e78831741d02091e0d