내가 게시 한 Qiita 기사의 PV 수를 API로 가져옵니다.

9150 단어 파이썬Qiita

TL;DR


  • 자신이 게시 한 기사의 PV 수를 알고 싶다
  • 개별 페이지를 보면 확인할 수 있지만, 가능하면 일괄로 취하고 싶다
  • Qiita API를 사용합시다

  • 게시한 항목의 PV 수 정보



    내가 게시한 기사를 보면 PV 수가 표시됩니다.



    볼 수 있는 것은, 자신이 투고한 기사만 같네요.

    그렇게 해서 이것을 어떻게든 일괄적으로 취할 수 없는 것일까, 라고.

    Qiita API v2



    이것을 실현하려면 Qiita API를 사용하면 좋을 것 같습니다.

    Qiita API v2 문서

    "게시물"에 대한 API를 사용하면 page_views_count(브라우즈)로 검색할 수 있는 것 같습니다.



    조사해 보니 몇 가지 같은 일을 하고 있는 기사도 있었는데, 여기는 공부를 겸해서 스스로 쓰고 싶습니다.

    제목은 파이썬에서.

    사용하는 Qiita API는 다음 두 가지입니다.
  • 인증 중인 사용자의 기사 목록을 생성 날짜 및 시간 내림차순으로 반환하는 API
  • 기사를 얻는 API

  • 액세스 토큰 얻기



    먼저 액세스 토큰을 얻습니다.

    "설정"→ "응용 프로그램"에서 액세스 토큰을 발행하십시오.



    스코프는 이번에는 read_qiita가 있으면 됩니다.



    여기에서 얻은 토큰의 값을 기억합니다.



    작성한 액세스 토큰은 목록으로 볼 수 있습니다.



    환경



    이번 환경은 여기입니다.
    $ python3 -V
    Python 3.6.8
    

    HTTP 요청에는 요청을 사용합니다.
    $ pip3 install requests
    

    사용한 Requests 버전은 여기입니다.
    $ pip3 freeze
    ...
    requests==2.22.0
    ...
    

    소스 코드



    이제 PV 수를 얻는 소스 코드를 만듭니다.

    이런 느낌으로 만들었습니다.
  • 내가 게시 한 기사의 PV 수를 얻고 결과보기
  • PV 수, 제목, URL, 태그, 생성 날짜 및 시간 표시

  • 디스플레이는 PV 수의 내림차순으로 수행됩니다
  • Qiita API를 호출 할 때 Authorization 헤더에 액세스 토큰 부여
  • API를 호출 한 후 잠자기

  • get_qiita_item_pv.py
    from time import sleep
    import requests
    
    access_token = "[作成したアクセストークン]"
    
    item_list_base_url = "https://qiita.com/api/v2/authenticated_user/items"
    headers = { "Authorization": f"Bearer {access_token}" }
    
    page = 1
    per_page = 100
    
    sleep_time = 0.1
    
    page_views = []
    
    while True:
        item_list_url = f"{item_list_base_url}?page={page}&per_page={per_page}"
    
        items = requests.get(item_list_url, headers = headers)
        items_body = items.json()
    
        if not len(items_body):
            break
    
        for entry in items_body:
            item_id = entry["id"]
    
            item_url = f"https://qiita.com/api/v2/items/{item_id}"
    
            item = requests.get(item_url, headers = headers)
            item_body = item.json()
    
            title = item_body["title"]
            url = item_body["url"]
            tags = item_body["tags"]
            created_at = item_body["created_at"]
            page_views_count = item_body["page_views_count"]
    
            page_views.append({
                "title": title,
                "url": url,
                "tags": [ tag["name"] for tag in tags ],
                "created_at": created_at,
                "page_views_count": page_views_count
            })
    
            sleep(sleep_time)
    
        page += 1
    
        sleep(sleep_time)
    
    page_views.sort(key = lambda e: e["page_views_count"], reverse = True)
    
    for page_view in page_views:
        print(f"""page_view: {page_view['page_views_count']}
      title: {page_view['title']}
      url: {page_view['url']}
      tags: {page_view['tags']}
      created_at: {page_view['created_at']}""")
        print()
    

    PV수는, 기사 일람의 API에서는 취득할 수 없어서(API 문서를 보면 취할 것 같은 분위기는 있습니다만…), 실제로는 기사 개별의 API를 호출할 필요가 있습니다. 이 때 자격 증명(요청은 액세스 토큰)이 필요합니다.

    실행



    이제 자신의 계정으로 스크립트를 실행해 보겠습니다.

    이런 결과가 되었습니다.
    $ python3 get_qiita_item_pv.py 
    page_view: 6154
      title: Ubuntu Linux 18.04 LTS / 18.10でOpenJDK 11を使いたい
      url: https://qiita.com/charon/items/af0f0de2ae9adbc03bfe
      tags: ['Java', 'Linux', 'Ubuntu']
      created_at: 2018-11-19T13:03:18+09:00
    
    page_view: 3846
      title: プロキシ環境下でdocker buildしたい
      url: https://qiita.com/charon/items/d8365d610343d64d598e
      tags: ['Docker']
      created_at: 2019-01-04T11:29:29+09:00
    
    page_view: 1826
      title: 初めてのZeroMQ(Python)でREQ-REPパターン
      url: https://qiita.com/charon/items/bdbef40fca6fa89edb24
      tags: ['Python', 'ZeroMQ']
      created_at: 2019-04-09T16:32:42+09:00
    
    page_view: 1735
      title: Apacheのアクセスログを、FluentdでtailしてElasticsearchに放り込む
      url: https://qiita.com/charon/items/86d12ac7ca2d7cf6c580
      tags: ['Apache', 'Fluentd', 'Elasticsearch', 'Kibana']
      created_at: 2018-12-12T09:09:26+09:00
    
    page_view: 1613
      title: Stack Overflowクローン、Scooldを使ったQAサイト
      url: https://qiita.com/charon/items/cacc2cfac380d8ad46b9
      tags: ['Java', 'AdventCalendar']
      created_at: 2018-12-11T14:34:57+09:00
    
    page_view: 1385
      title: Docker Composeで起動したコンテナのログを、Amazon CloudWatch Logsに送る
      url: https://qiita.com/charon/items/7e2328e5abf7340d32b6
      tags: ['Docker', 'CloudWatch-Logs']
      created_at: 2019-05-07T12:49:04+09:00
    
    〜省略〜
    

    자신이 쓴 기사에서 어떤 것이 보이고 있는지, 가끔 보면 재미있을지도? 라고 생각합니다.

    좋은 웹페이지 즐겨찾기