QiitaOrganization의 LGTM 수를 GAS로 Slack에 알립니다.

했던 일


QiitaOrganization 페이지에서 LGTM 수를 얻고

이런 식으로 매주 Slack에 통지.

왜 했는지


  • 사내에서 Qiita를 고조시키고 싶은, 관심 UP
  • 게시물에 동기 부여 UP
  • 채워진 게시물이 늘어나면 좋을 것입니다

  • 구현 메모



  • LGTM 수는 [feed] (/feed subscribe https://qiita.com/organizations/sousei-tech/activities.atom)에 포함되지 않았기 때문에 스크래핑으로 취득
  • 왠지 스크레이핑하면 LGTM의 뒤에 s가 찢어진다. 이것은 미해결.


  • Slack 알림은 Incoming Webhook을 사용합니다.
  • 설정 이런 느낌


  • LGTM 수는 스프레드시트에 기록
  • 이런 느낌으로 날짜와 LGTM수가 모여 간다


  • 매주 실행은 GAS의 트리거로 하고 있다.

  • 코드(GAS)


    스프레드시트에서 도구 → 스크립트 편집기를 엽니다.
    아래를 복사하여 url과 webhook_url을 다시 쓰면 OK.
    function notifyContributions() {
      const url = 'QiitaOrganizationのURL'; // 例: https://qiita.com/organizations/sousei-tech
      const webhook_url = "Incoming WebhookのURL"; // 例)https://hooks.slack.com/services/HOGE/FUGA/HOGA
    
      const response = UrlFetchApp.fetch(url);
      const html = response.getContentText();
      
      let contributions;
      // NOTE: HTML構成変わると動かなくなる。そのときはwebページをソース表示して該当箇所のHTMLを見つけて修正する。
      // NOTE: 2020/3/10時点 "likesCount":1096,
      const targetLeft = '"likesCount":';
      const targetRight = ',';
      let index = html.indexOf(targetLeft)
      // Logger.log(index);
      if (index !== -1) {
        let tmp = html.substring(index + targetLeft.length);
        index = tmp.indexOf(targetRight);
        if (index !== -1) {
          contributions = tmp.substring(0, index);
        }
      }
      
      const book = SpreadsheetApp.getActiveSpreadsheet();
      const sheet = book.getSheetByName("シート1");
    
      const last_row = sheet.getDataRange().getLastRow();
      const before_contributions = sheet.getRange(last_row, 2).getValue();
      const target_row = last_row + 1;
      sheet.getRange(target_row, 1).setValue(new Date());
      sheet.getRange(target_row, 2).setValue(contributions);
      // Logger.log(before_contributions);
      
      const message = contributions + ' LGTM :tada: (前回から+' + (contributions - before_contributions) + ')' + "\n" + url;
      
    // エラーで動かなくなったときはここでリターンして調査するとよい。(Slackへの通知をやめる)
    //  Logger.log(contributions);
    //  return;
    
      const jsonData = {
        "text" : message,
        "link_names" : 1,
      };
      const payload = JSON.stringify(jsonData);  
      const options = {
        "method" : "post",
        "contentType" : "application/json",
        "payload" : payload,
      };
      UrlFetchApp.fetch(webhook_url, options);
    


    직원의 소식을 통지하고 싶은 경우는 slack로 feed를 구독해 두면 OK! (이것도 GAS로 구현할까 싶었던 😅)/feed subscribe https://qiita.com/organizations/sousei-tech/activities.atom

    사이고에게


    그럼 멋진 QiitaOrganization 생활을.

    좋은 웹페이지 즐겨찾기