Qiita APIのPythonラッパーを今さら改造してみました

# Qiita APIを使いたい

Qiitaに投稿した自分の記事のViewsを一覧で確認しようとしました。

（´-`）.｡oO（Qiitaはエンジニア向けだからきっとAPIがあるんだろうなぁ）

と思っていたらありました。

https://qiita.com/api/v2/docs

<br>

ただHTTPリクエストを投げたり受け取ったりが面倒で

（´-`）.｡oO（こういうのはPythonで使えるように誰かがしてくれているんだろうなぁ）

と思っていたらちゃんと作ってくれている方がいました。

https://qiita.com/petitviolet/items/deda7b66852635264508

<br>

驚きなのが作成が2014年！
Qiitaはここ最近のサービスだろうと侮っていました…新参者が失礼いたしました。

で、こちらでも十分なのですが毎回to_jsonするのが面倒なので改造してみました。

https://github.com/nekoniii3/qiita_py_nn

# qiita_py_nn

本家の方は[qiita_py](https://github.com/petitviolet/qiita_py)でqiita_py2にしようかと思ったのですが、勝手にやったら怒られそうなのでqiita_py_nnとしました。

```:インストール
!pip install qiita_py_nn
```

<br>

QiitaClientを継承したQiitaClient2を追加しています。こちらでクライアント作成して下さい。（アクセストークンの発行方法は[こちら](https://qiita.com/maiamea/items/680cca06f7825595cba0)）

```python:クライアント作成
from qiita_py_nn.client2 import QiitaClient2

access_token = '*********************'

client = QiitaClient2(access_token=access_token)
```

<br>

## 利用例

メソッドの呼び出し方は同じです。

### get_user（ユーザ情報取得）

```python:get_user
user_name = "nekoniii3"

user = client.get_user(user_name)

print(user.name, user.description)

print(user)
```

```:出力結果
ネコにいさんチャンネル 普段はYouTubeでITやAI関連の解説動画を投稿しているので是非見てください！

QiitaUser(description='普段はYouTubeでITやAI関連の解説動画を投稿しているので是非見てください！', facebook_id='', followees_count=1, followers_count=6, github_login_name=None, id='nekoniii3', items_count=23, linkedin_id='', location='', name='ネコにいさんチャンネル', organization='', permanent_id=3549938, profile_image_url='https://s3-ap-northeast-1.amazonaws.com/qiita-image-store/0/3549938/3695381b0559938998b2c227a9140a9c8b8364c1/large.png?1693573415', team_only=False, twitter_screen_name='nekonii3info', website_url='https://www.youtube.com/@nekoniisan')
```

.to_json()は不要でuser.name、user.descriptionなどで情報を得ることができます。

<br>

### get_authenticated_user_items（自身の記事を取得）

```python:list_user_items
items = client.get_authenticated_user_items()

for item in items:
    print(item.title, item.url)
```
```:出力結果
Cloud Functionsが消えた？ CloudRun関数へ https://qiita.com/nekoniii3/items/d443f49de6480a6309b2
はじめてのリバースプロキシ Cloud Run CORSエラー回避 https://qiita.com/nekoniii3/items/e6cda24f17590603a9b6
Vercelでsessionを使う（Python Flask） https://qiita.com/nekoniii3/items/369e02f767e7d1c5fa1e
```

表示していませんが**item.page_views_count**で見られた回数を取得できます。

<br>

### list_user_items（指定のユーザの記事を取得）

```python:list_user_items
user_name = "sakasegawa"

items = client.list_user_items(user_name)

for item in items:
    print(item.title, item.url)
```
```:出力結果
最近のコーディングにおけるLLMの使い方QA https://qiita.com/sakasegawa/items/d36d922040031093cacd
MS謹製のanything to Markdownライブラリ: markitdownを試す&PRを出してみた件 https://qiita.com/sakasegawa/items/4b55deeea9c93145c4da
Gemini Multimodal APIで画面共有しながらAIと会話をする & Gemini 2.0 の OCR 性能を測ってみる！ https://qiita.com/sakasegawa/items/b332367135b435b85cbb
```

<br>

## get_item（記事の情報を取得）

```python:get_item
item_id = "e8aaf7762110a8be9b84"

item = client.get_item(item_id)

print(item.title, item.url)

print(item)
```
```:出力結果
【React初心者向け】Vercel v0で生成したページ・アプリをローカルで動かす  https://qiita.com/nekoniii3/items/e8aaf7762110a8be9b84

QiitaArticle(body='（2024/12/10追記）もっと簡単な方法がありました！→[『mozさんのnoteです』](htt', coediting=False, comments_count=0, created_at='2024-09-14T21:51:13+09:00', group=None, id='e8aaf7762110a8be9b84', likes_count=18, organization_url_name=None, page_views_count=7709, private=False, reactions_count=0, rendered_body=<p data-sourcepos="1:1-1:146">（2024/12/10追記）もっと簡単な, slide=False, stocks_count=11, tags=[{'name': 'React', 'versions': []}, {'name': 'Next.js', 'versions': []}, {'name': 'Vercel', 'versions': []}, {'name': '生成AI', 'versions': []}, {'name': 'v0', 'versions': []}], team_membership=None, title='【React初心者向け】Vercel v0で生成したページ・アプリをローカルで動かす ', updated_at='2024-12-12T22:25:34+09:00', url='https://qiita.com/nekoniii3/items/e8aaf7762110a8be9b84', user={'description': '普段はYouTubeでITやAI関連の解説動画を投稿しているので是非見てください！', 'facebook_id': '', 'followees_count': 1, 'followers_count': 6, 'github_login_name': None, 'id': 'nekoniii3', 'items_count': 23, 'linkedin_id': '', 'location': '', 'name': 'ネコにいさんチャンネル', 'organization': '', 'permanent_id': 3549938, 'profile_image_url': 'https://s3-ap-northeast-1.amazonaws.com/qiita-image-store/0/3549938/3695381b0559938998b2c227a9140a9c8b8364c1/large.png?1693573415', 'team_only': False, 'twitter_screen_name': 'nekonii3info', 'website_url': 'https://www.youtube.com/@nekoniisan'})
```
<br>

### list_item_stockers（指定の記事をストックしたユーザを取得）

```python:list_item_stockers
item_id = "e8aaf7762110a8be9b84"

item_stockers = client.list_item_stockers(item_id)

for user in item_stockers:
    print(user.id, user.name)
```
```:出力結果
girimax
takobuta 拓 大内
nyantata 
```

<br>

# おわりに

ただ全てのメソッドではなく、以下のみ対応をしております。

> get_item
get_user
list_user_items
list_items
list_tag_items
list_user_stocks
get_authenticated_user_items
list_users
get_authenticated_user
list_user_followees
list_user_followers
list_item_stockers

**※継承しているのでこれら以外のメソッドは[本家](https://github.com/petitviolet/qiita_py)と同じように利用できます**

<br>

使って見て思いましたがlist_user_itemsなどで取得件数が指定できたらなぁ…なんて思いました。
不具合や改善要望ありましたらご連絡ください。