0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellでQiitaAPI入門(ステップ2 指定タグ全記事取得)

Last updated at Posted at 2024-11-16

はじめに

PowerShellでQiitaAPI入門のステップ2です。今回は指定タグの全記事取得です。既に高度に使いこなされている方にはあたりまえすぎる話ですが、公式解説はチームに関連した機能が詳しく解説されていて、基本的な使用例とかはすっとばされている感じがしたので、このあたりわかりにくくて手が出せにくかった方を対象にしつつ自分用のメモを兼ねます。

前提条件

Windows11 Pro 22H2 22621.4169
PowerShell psversion 5.1.22621.4249
QiitaAPI 2.0

実行例(ステップ2)

PowerShellではInvoke-RestMethodを使ってQiitaAPIにアクセスします。

指定タグの基本情報取得

タグの基本情報取得です。

コマンド文

Invoke-RestMethod "https://qiita.com/api/v2/tags/(タグ名)"

実行結果

例として筆者がよく投稿しているmindタグに対して実行します。

PS C:\pmind> Invoke-RestMethod "https://qiita.com/api/v2/tags/mind"

followers_count icon_url
--------------- --------
             19 https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4d747b01209ee0bbead2d9fc33274fe065fcd38a/med...

フォロワー数とイメージのURLが返ります。

指定タグの記事取得(ページネーション指定無)

記事取得をデフォルトの件数で取得すると大量の記事テキストが受信されますので、いったん変数に結果を格納するとします。のちにこの変数を使っていろいろ操作します。

コマンド文

$res = Invoke-RestMethod "https://qiita.com/api/v2/tags/(タグ名)/items"

実行結果

PS C:\pmind> $rest = Invoke-RestMethod "https://qiita.com/api/v2/tags/mind/items"
PS C:\pmind> $rest.count
20

20記事返っています。$restを出力すると大量のテキストでコンソールが流れます。ここでは割愛します。

記事取得(記事ID指定)

特定の記事の内容を取得するには記事IDを指定します。(ステップ1と重複します。)

コマンド文

$res = Invoke-RestMethod "https://qiita.com/api/v2/items/(記事ID)"

実行結果

PS C:\pmind> $rest = Invoke-RestMethod "https://qiita.com/api/v2/items/bd97e56fdfef2b293828"

実行結果(取得内容)

テキスト量が多いため割愛しますが、出力イメージを確認したい方はステップ1を参照してください。

指定タグの記事取得(ページネーション指定有)

コマンド文

$rest =Invoke-RestMethod "https://qiita.com/api/v2/tags/(タグ名)/items?page=(ページ位置)&per_page=(1ページあたりの記事数)"

実行結果

PS C:\pmind> $rest = Invoke-RestMethod "https://qiita.com/api/v2/users/mylifewithviolin/items?page=1&per_page=10"
PS C:\pmind> $rest.count
10

10記事返っています。$restを出力すると大量のテキストでコンソールが流れます。ここでは割愛します。

指定タグの記事取得(ページネーション指定してループ)

コマンド文

# 特定のタグ名 
$tag_name = (タグ名)
# ページネーション設定 
$page = (ページ位置初期値)
$per_page = (1ページあたりの記事数)
$all_articles = @() 

# 〇ループ開始
# APIエンドポイントのURL(ページネーションのページ位置変化)
# APIリクエストを送信 
# レスポンスを配列に追加 
# 次のページへ (ページネーションのページ位置カウントアップ)
# 〇ループ終端◇最後のページに到達したかを確認 

do { 
$apiUrl = "https://qiita.com/api/v2/tags/$tag_name/items?page=$page&per_page=$per_page" 
$res = Invoke-RestMethod -Uri $apiUrl -Method Get 
$all_articles += $res 
$page++ 
} while($res.Count -eq $per_page)

実行結果

PS C:\pmind> $tag_name = "mind"
PS C:\pmind> $page = 1
PS C:\pmind> $per_page = 100
PS C:\pmind> $all_articles = @()
PS C:\pmind> do {
>> $apiUrl = "https://qiita.com/api/v2/tags/$tag_name/items?page=$page&per_page=$per_page"
>> $res = Invoke-RestMethod -Uri $apiUrl -Method Get
>> $all_articles += $res
>> $page++ 
>> } while ($res.Count -eq $per_page)
PS C:\pmind>
PS C:\pmind> $all_articles.count
299

mindタグのページに公開されている記事数より+1となってしまいましたが、近い数字にはなっています。

おわりに

いかがでしたか?参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?