LoginSignup
4
1

More than 1 year has passed since last update.

Google Apps ScriptとPythonでQiitaのContribution数増加や閲覧数を記録する

Last updated at Posted at 2021-05-07

image.png

↑ この赤いところを日々記録してみる、という話。

GAS

image.png
HTML上の <span class="css-mf9wc5">23856</span> を取得したいということになります。API としては以下があるのだが、ユーザー単位でContribution数を取るというのはできない。

だったので、HTMLから直接走査しました。
Contribution とは...

自分の日々のモチベーションだったりをこれで維持したいという目論見です。

全体

端的に以下 Google Apps Script(GAS)を書きました。

Code.gs
function main () {
  var now = new Date(); //現在日時を取得
  var time = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
  let count = countContribution();
  write2SpreadSheet(time, count);
}

function countContribution() {
  const URL = 'https://qiita.com/e99h2121';//mypage
  let responseDataGET = UrlFetchApp.fetch(URL).getContentText();
  let myRegexp = /<span class=\"css-mf9wc5\">([\d]+)<\/span>/; //★ `<span class="css-mf9wc5">nnnnn</span>`  
  let contribution = responseDataGET.match(myRegexp);
  let out = contribution[0].replace("<span class=\"css-mf9wc5\">","").replace("<\/span>",""); //★ 数字部分のみに置換
  return out;
}

function write2SpreadSheet(today, count) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  // 書き込みタブの名前と揃える。
  var sheet = ss.getSheetByName('count');
  var row = sheet.getLastRow();
  var lastval = sheet.getRange(row,2).getValue();
  var plus = count - lastval; 
  sheet.appendRow([today, count, plus]);
}

で、記録。

image.png

2時間おきの時間実行で仕掛けるとこんな感じになる。
(実際は1日1回程度で良い)

OrganizationのContribution数も

同じ要領で、Organization の数値をとってSlackに通知しているとの話。

注意点

色々応用できそうだなあと思いつつ、お約束としては以下。

あるいはPythonでCSVに落とす

import requests
import json

url = 'https://qiita.com/api/v2/authenticated_user/items'
headers = {"content-type": "application/json",
           "Authorization": "Bearer {Token}"}
params = {
    'page'     : 1,
    'per_page' : 100,
}

res = requests.get(url, params=params, headers=headers)
list = res.json()

print("==========================================================")
# ヘッダ出力
print("\"title\",\"page_views_count\",\"likes_count\"")

for item in list:
    item_id = item['id']
    title = item['title']
    likes_count = item['likes_count']
    item_url = item['url']

    url = 'https://qiita.com/api/v2/items/' + item_id
    res = requests.get(url, headers=headers)
    json = res.json()
    page_views_count = json['page_views_count']

    print("\"" + title + "\",\"" + str(page_views_count) + "\",\"" + str(likes_count) + "\",\"" + item_url + "\"")

参考

以上を踏まえつつ、アウトプットを楽しむ仕掛け諸々のお話でした。
参考になればさいわいです。

4
1
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
4
1