Qiita API v2에서 자신의 스톡을 모두 지우는 Python 스크립트를 작성해 보았습니다.
Qiita API v2 정보
Qiita API v2의 일반 정보는 이전에 작성한 Qiita API v2를 사용하여 자신의 모든 게시물을 내보내는 Python 스크립트를 작성했습니다.으로 요약되어 있습니다.
스크립트 정보
동기
자신이 쓴 기사에 대한 반응만을 통보해 주었으면 하는데 「스탁한 기사」가 갱신되었을 때도 통지되어 버리는 것이 번거롭기 때문입니다.
운영에 문의해 보았는데, 이 통지를 끊는 방법은 현시점에서는 없다고 하는 것이었습니다.
그런데, 스톡을 지워 갈까요… 그래서 API를 사용하여 단번에 지우기로 결정했습니다.
(여담 1) 원래 왜 그렇게 재고하고 있습니까?
Qiita에는 "좋아요"와 "스톡"이 있지만, 나는 다음과 같이 인식하고 있습니다.
동기
자신이 쓴 기사에 대한 반응만을 통보해 주었으면 하는데 「스탁한 기사」가 갱신되었을 때도 통지되어 버리는 것이 번거롭기 때문입니다.
운영에 문의해 보았는데, 이 통지를 끊는 방법은 현시점에서는 없다고 하는 것이었습니다.
그런데, 스톡을 지워 갈까요… 그래서 API를 사용하여 단번에 지우기로 결정했습니다.
(여담 1) 원래 왜 그렇게 재고하고 있습니까?
Qiita에는 "좋아요"와 "스톡"이 있지만, 나는 다음과 같이 인식하고 있습니다.
항상 기계적으로 좋아요와 스톡을 동시에 실시했습니다.
(여담 2) 결국 어떤 운용으로 했다?
북마크 기능 부분은 좋아하는 게시물 에서 볼 수 있기 때문에 주식은 실시하지 않고 좋아하는 것만 하기로 했습니다.
동작 데모
다음은 우리 계정으로 시도한 예입니다. 665개의 스톡을 모두 지웁니다.
$ python stock_canceler.py -u sta
getting between 1 to 100...
getting between 101 to 200...
getting between 201 to 300...
getting between 301 to 400...
getting between 401 to 500...
getting between 501 to 600...
getting between 601 to 700...
1/655 TITLE:Windows環境+node.js+mocha+istanbulでUTしてコードカバレッジを取る...
2/655 TITLE:grunt+istanbul+mochaでNode.jsのテスト&カバレッジ計測を行う...
3/655 TITLE:システムで「性別」の情報を扱う前に知っておくべきこと...
...
653/655 TITLE:2015年センター試験数学IAを全てプログラム(Python)で解く...
654/655 TITLE:100万倍速いプログラムを書く...
655/655 TITLE:いい結婚相手を見つける最適な方法を検証してみた...
Fin.
$ python stock_canceler.py -u sta
getting between 1 to 100...
Fin.
스크립트 구현
사용한 Qiita API
필요한 것은 다음 두 가지입니다.
$ python stock_canceler.py -u sta
getting between 1 to 100...
getting between 101 to 200...
getting between 201 to 300...
getting between 301 to 400...
getting between 401 to 500...
getting between 501 to 600...
getting between 601 to 700...
1/655 TITLE:Windows環境+node.js+mocha+istanbulでUTしてコードカバレッジを取る...
2/655 TITLE:grunt+istanbul+mochaでNode.jsのテスト&カバレッジ計測を行う...
3/655 TITLE:システムで「性別」の情報を扱う前に知っておくべきこと...
...
653/655 TITLE:2015年センター試験数学IAを全てプログラム(Python)で解く...
654/655 TITLE:100万倍速いプログラムを書く...
655/655 TITLE:いい結婚相手を見つける最適な方法を検証してみた...
Fin.
$ python stock_canceler.py -u sta
getting between 1 to 100...
Fin.
사용한 Qiita API
필요한 것은 다음 두 가지입니다.
GET /api/v2/users/:user_id/stocks
DELETE /api/v2/items/:item_id/stock
사용법으로는
이렇게 됩니다.
사용한 언어 및 라이브러리
requests 라이브러리
페이지 네이션 정보
Qiita API는 한 번에 100개까지만 데이터를 가져올 수 있으므로 100개보다 많은 데이터를 얻으려면 페이지네이션을 고려해야 합니다.
문서를 따르면 응답의 Link 헤더나 Total-Count 이나를 보고, 능숙하게 반복 요청을 보내면 됩니다만, 귀찮았기 때문에 본 스크립트에서는 옆으로 착용하고 있습니다.
아래에 코드를 발췌합니다.
먼저 스톡 목록을 요청하는 코드는 다음과 같습니다.
def get_stocks(target_userid, page, per_page):
url = 'https://qiita.com/api/v2/users/{}/stocks'.format(target_userid)
params = {
'page' : page,
'per_page' : per_page,
}
r = get(url, params, headers)
items = r.json()
stocks = []
is_last = False
# int(r.headers['Total-Count']) 見た方が良い?
# でも len(items) と Total-Count が食い違うケースはそうはないと思う(思いたい)ので
# とりあえず len で判定.
# ★ per_page(=100)件分取れなかった=データ全部取れた、とみなす
if len(items) < per_page:
is_last = True
for i,item in enumerate(items):
stock = Stock(item)
stocks.append(stock)
return [stocks, is_last]
이것을 이하의 코드로 반복적으로 호출하는 것으로 페이지네이션(같은 것)을 실현하고 있습니다.
PAGE_START_NO = 1
target_userid = args.username
per_page = 100
cur_page = PAGE_START_NO
all_stocks = []
# ★ 1-100件、101-200件、というふうに繰り返すループ
while True:
a = (cur_page-1)*per_page + PAGE_START_NO
b = a + per_page - 1
print('getting between {} to {}...'.format(a, b))
stocks, is_last = get_stocks(target_userid, cur_page, per_page)
all_stocks.extend(stocks)
if is_last:
break
cur_page += 1
길지만 요컨대
라고 오로지 반복해 가고, 100건분 취할 수 없었던 시점을 끝으로 간주하고 있습니다. 나만의 스쿠리로 한 번만 실행하기 때문에 이런 걸로 좋을 것입니다
결론
이제 번거로운 주식 알림에서 왔습니다. API가 있으면 이러한 작업도 비교적 편하게 할 수 있기 때문에 좋네요.
Reference
이 문제에 관하여(Qiita API v2에서 자신의 스톡을 모두 지우는 Python 스크립트를 작성해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sta/items/ae50b93201c6815026c1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Qiita API v2에서 자신의 스톡을 모두 지우는 Python 스크립트를 작성해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sta/items/ae50b93201c6815026c1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)