LoginSignup
2
1

More than 5 years have passed since last update.

Twitterで自分宛てに送ったDMをPocketに追加する

Last updated at Posted at 2018-02-06

DM取得のAPIエンドポイント変更に伴いコードを変更した(2019/02/22)

概要

TwitterでDirectMessageを用いて自分にShareすると、後から探すことが難しい。本記事ではPocketの検索及びタグ機能を用いてこれを改善したプログラムを紹介する。

準備

本記事で説明するコードは事前に以下の準備が必要である。本記事での説明は省略する。

実装

Pocket認証及びpocket_add関数はLhankor_Mhy様、Twitter認証はkijtra様のプログラムを流用している。
本プログラム単体では動作しない。

code.gs
function main() {
  var spreadsheet = SpreadsheetApp.openById('spreadsheetIdをここに記入');
  var sheet = spreadsheet.getSheets()[0];
  var res = Twitter.getDM();
  getOwnDM(sheet,res);
  delete_duplicate(sheet);
  post_pocket(sheet);
}

function post_pocket(sheet){
  var lastrow = sheet.getLastRow();
  var array = sheet.getSheetValues(1, 2, lastrow, 4);
  var post={};
  for(var i in array){
    if(array[i][2]=="" && (array[i][0]+"")!="text"){
      // このスクリプトで追加されるアイテムの共通タグ
      var tags = ["DM"];
      if((array[i][1]+'').length>0){
        var tag=(array[i][1]+"").split(/\s+/);
        Array.prototype.push.apply(tags, tag);
      }
      post.url = array[i][0];
      post.tags = tags;
      pocket_add(post);
    }
  }
  sheet.getRange(1,4,lastrow,1).setValue("Done");
}

//重複削除
function delete_duplicate(sheet) {
  var arr_data=sheet.getDataRange().getValues();
  var values = [];
  var no_overlapped = arr_data.filter(function (e){
    if (values.indexOf(e[0]) === -1) {
      values.push(e[0]);
      return e;
    }
  });
  sheet.clearContents();
  sheet.getRange(1,1,no_overlapped.length,no_overlapped[0].length).setValues(no_overlapped);
}  

// URLかどうかの判定,タグとURLの分離
function checkType(text){
   url=text.match(/(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/);
  if(url!=null){
    url=url[0];
    text=text.replace(url,"");
    return [url,text];
   }else{
     return ["text",""];
   }
}

function getOwnDM (sheet,jsonData){
  var response = [];
  for (i in jsonData){
    if(jsonData[i]["message_create"]["sender_id"]==jsonData[i]["message_create"]["target"]["recipient_id"]){
      var res=[jsonData[i]["message_create"]["message_data"]["text"]];
      Array.prototype.push.apply(res, checkType(res[0]));
      response.push(res);
    }
  }
  var rows = response.length;
  var cols = response[0].length;
  var lastrow = sheet.getLastRow();
  sheet.getRange(lastrow+1,1,rows,cols).setValues(response);
}

Twitter.getDM = function () {
  var path = "direct_messages";
  var data = {"count":200,"skip_status":true,"include_entities":false};
  var res = this.api(path, data);
  return res;
}

2
1
2

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