DM取得のAPIエンドポイント変更に伴いコードを変更した(2019/02/22)
概要
TwitterでDirectMessageを用いて自分にShareすると、後から探すことが難しい。本記事ではPocketの検索及びタグ機能を用いてこれを改善したプログラムを紹介する。
準備
本記事で説明するコードは事前に以下の準備が必要である。本記事での説明は省略する。
- GoogleSpreadSheetIdの取得
- Pocketの認証
- Twitterの認証
実装
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;
}