【라이프 해크】여성 아나운서 응원bot을 TwitterAPI로



TL;DR



여자 아나운서를 응원하는(사진, 동영상을 리트윗한다)bot을 만듭니다.
TwitterAPI, Google App Script(이하 GAS)를 사용합니다.
이 계정 를 팔로우하면 행복할 수 있다고 생각합니다^^

소개



설날, 뻔뻔하고 있으면 뉴스를 보고 있으면 타무라 마코씨라는 미녀 아나운서를 발견했습니다.
Twitter 팔로우하려고 생각했는데 공식도 Bot도 없었기 때문에 스스로 만들기로 했습니다.

언어 선정에 대해.
내 주요 언어는 파이썬이지만 정기적으로 그리고 마음대로 실행하기를 원하기 때문에
이번에는 GAS로 쓰기로 결정했습니다.

전제


  • 내가 한 일만 말합니다 (컨셉을 즐기시면 감사하겠습니다).
  • 세세한 ToDo는 소개한 기사에 맡기고 있습니다

  • 했던 일


  • TwitterAPI 신청
  • GAS와 Twitter 협력
  • Twitter에 게시 할 GAS 작성
  • 트리거를 지정해 자동적으로 실행되도록 한다

  • 1은 이 기사
    2 는, 이 기사 를 참고로 합니다(압도적 감사)
    이 단계에서, 뭔가 적당한 것이라면, GAS로부터 트윗 할 수 있는 상태가 되어 있다고 생각합니다.

    3 여기에서 좋은 느낌으로 써 갑니다
    지금
    //認証用インスタンスの生成
    var twitter = TwitterWebService.getInstance(
      'xxxx',//API Key
      'xxxx'//API secret key
    );
    
    //アプリを連携認証する
    function authorize() {
      twitter.authorize();
    }
    
    //認証を解除する
    function reset() {
      twitter.reset();
    }
    
    //認証後のコールバック
    function authCallback(request) {
      return twitter.authCallback(request);
    }
    
    //リツイートする
    function retweet(tweetid){
      var service  = twitter.getService();
      var response = service.fetch('https://api.twitter.com/1.1/statuses/retweet/'+tweetid+'.json', {
                                   method: 'post',
                                   payload: { id: tweetid}
                                   });
      Logger.log(JSON.parse(response));
    }
    
    //ポストする
    function doPost(){
      var id = 'xxx';
      retweet(id);
    }
    

    이런 느낌이 되고 있습니다.
    1.2.를 마친 전제로,
    doPost 함수의 'xxx'에 적당한 Twitter(투고된 트윗 화면의 URL로부터 알 수 있다)를 지정해, doPost 함수를 실행하면 훌륭하게 리트윗 되어야 합니다.

    이 id 부분도 자동으로 가져올 수 있도록 합시다.
    다음과 같은 느낌이 듭니다.
    
    //24時間以内のツイートか確認【新規で追加した関数】
    function within24(twt){
      var oneday = 1000 * 60 * 60 * 24
      var created = twt.created_at;
      var c = new Date(created);
      var today = new Date();
      var timeDelta = (today.getTime() - c.getTime())/oneday;
      Logger.log(timeDelta);
      if (timeDelta<1){
        return true;
      }else{
        return false;}
    }
    
    // 検索wordをもらい, 条件に一致するツイートidを配列で返す【新規で追加した関数】
    function search(word){
      if (word == "") {
        return;
      }
    
      word = encodeURIComponent(word);
    
      var url, options, response, jsonString, json, tweets = [];
    
      // Twitter Search APIのURL
      var API_URL = "https://api.twitter.com/1.1/search/tweets.json?";
    
      try {
    
        url = API_URL + "count=100" + "&q=" + word;
    
        try {
          var service  = twitter.getService();
          var response = service.fetch(url, {method: 'get'});
          var array = JSON.parse(response)['statuses'];
          var leng = array.length;
          var output = [];
          //画像が存在するか確認
          for(var i=0; i<leng; i++){
            var twt = array[i];
            var ent = twt.entities;
            if ('media' in ent){
              if (within24(twt)){
                output.push(twt['id_str']);
              }
            }
          }
        } catch(e) {
          Logger.log(e);
          return;
        }
        return output;
      } catch(e){
        Logger.log(e);
      }
    }
    
    //ポストする【先ほどもあったが少しいじった関数】
    //検索ワードを指定してsearch関数に投げ、結果の配列をretweet関数に投げて実行
    function doPost(){
      var nums = search('田村真子');
      if (nums){
        nums.forEach(function(id){
          retweet(id);});
      }
    }
    

    각 함수의 설명은 코멘트 아웃하는 부분에 썼습니다!

    4 여기까지 할 수 있으면 트리거를 지정하기만 하면 됩니다!
    "편집"-> "현재 프로젝트 트리거"에서 트리거 관리 화면으로 건너 뛰고,
    트리거 추가를 선택합니다.

    조건은 이러한 형태로 하루에 한 번 doPost 함수가 실행되도록하고 저장합니다.

    그래서 누구를위한 문장인지 잘 모르기 때문에,
    앞으로 부족한 부분을 보충해 나가려고 생각합니다.

    추가 1(20210313)



    전혀 유지하지 않지만 여전히 움직이고 있습니다.
    팔로워가 700명이 넘었습니다. 현재의 문제는, 필터링 등 전혀 하고 있지 않기 때문에, 워드마저 포함되어 있으면, 스팸 같은 계정의 것도 리트윗 하게 되어 버린 것입니다. 마음이 맞으면 대책합니다.

    참고



    GAS×TwitterBot
    searchAPI(공식)

    좋은 웹페이지 즐겨찾기