見出し画像

チャネルトークとほかのツールと連携したい(スニペット・asana編) 番外編

どうもtmdです。
毎日短時間の業務委託で生きています。

前回「チャネルトークとほかのツールと連携したい(スニペット・asana編)」を書きましたが、これで一つ問題が生まれたため対策を書いてみます。

問題

UrlfetchAppのHTTPリクエストの制限に引っかかってエラーが出る

対象になる人

閲覧先のasanaのプロジェクトのタスクがいっぱいある皆さんって言いたいところですが、スニペットで動かすのは向かないのではと思うので、asanaとGASの組み合わせでデータ取ろうとしたら上限超えたとか言われる!ぴえん!!って人向けです。

コード

function getAsanaTasks_get() {
  var options = {
    'method': 'get',
    'contentType': 'application/json',
    'headers': { 
      'Authorization': 'Bearer ' + 【アクセストークン】
    },
  }
    
  var asanaUrl =  'https://app.asana.com/api/1.0/projects/【プロジェクトID】/tasks?opt_fields=name,completed_at,created_at,notes,permalink_url&limit=20'
  var list = [];  
  var i=1
  var response=""
  var result="" 
  while(i){
    response = UrlFetchApp.fetch(asanaUrl, options);
    result = JSON.parse(response);
    if(result.data){
      for(var i = 0; i < result.data.length; i++){
    list.push(result.data[i]["permalink_url"]);
      }
    } 
    if(result.next_page){
      asanaUrl = (result.next_page['uri'])
      i=1
    }else{
      i=0
    }
  }
  return list;
}

ポイント

URLのところの末尾に「&limit=20」がつきました。
20のところは「1 から 100 の間」であればOKです。

1回目は以前と同じように行きますが2回目以降はnext_pageにデータがある限りnext_page['uri']から呼び出します。これでいっぱいあっても安心です。

さらなる問題点

このコードは指定したプロジェクトの全部のタスクを呼び出していますので、結局読み込みに時間がかかります。
必要なものへピンポイントでアクセスしないとスニペットで実施するには向かなそうです。
その対策は別途考えてみます。

そのほか

その3に続き、再び以下のコードを参考にasanaへアクセスしております
ありがとうございます。


この記事が気に入ったらサポートをしてみませんか?