portersとは
人材業務(特にエージェント業務)に必要な機能を備えたクラウドシステムです
https://hrbc.porters.jp/

Portersのデータ入出力、編集を自動化したい!
今回は、このツールをGoogleのスプレッドシート&GASで自動操作していきたいと思います
初期設定
コードを書く前に必要なのは
- アプリを発行してもらう
 - システムのデータベースとアプリの連携を行う
お2つの操作です 
1. アプリを発行してもらう
portersを運営しているポーターズ株式会社 の担当者に依頼を行うます
数日するとこんな感じで


必要な情報が届きます
この時App Id、Secret、Redirect URLをメモっておきましょう
2. システムのデータベースとアプリの連携を行う
上でもらったアプリに対して、「ウチのporters環境を操作していいよ~」という権限を与えます
2-1. まずURLを作成する
上記App Id、Secret、Redirect URLを使ってURLを作成します
例として↓みたいな感じに
https://api-hrbc-jp.porterscloud.com/v1/oauth?app_id=123345678&redirect_url=https://www.hogehoge.co.jp&response_type=code&scope=partition_r,user_r,field_r,option_r,client_r,client_w,recruiter_r,recruiter_w,job_r,job_w,candidate_r,candidate_w,resume_r,resume_w,process_r,process_w,activity_r,activity_w,contract_r,contract_w,sales_r,sales_w,phase_r,phase_w,attachment_r,attachment_w,opportunity_r,opportunity_w,recruiter_r,recruiter_w
app_id=123345678yとredirect_url=https://www.hogehoge.co.jpの部分は
自身のApp Id、Redirect URLに書き換えてください
scope=以下の部分はいったんすべての権限をスコープとして付与した例を書きました
「セキュリティーの問題から、APIにはJOB情報の読み込みだけを許可したい」であれば「job_w」だけを書くなど、調整してみてください
どのスコープを付与すると、どの権限が与えられるのか、はこちらのScope Listを参考にしてください
2-2. URLをブラウザに打ち込んで認証を完了させる
上で作ったURLをブラウザに打ち込んでみてください
IDとPassなどが求められるので入力いただければ、連携が完了します
コーディング
1. 大前提の注意
portersとGASの相性がいまいちでして、
実行ボタンからAPIを叩くをうまくいかず、トリガーを設定して実行しAPIを叩くとうまくいきます
(これは、実行ボタンから実行されたスクリプトとトリガーから実行されたスクリプトで
使われているサーバが異なっていて、portersでは前者のサーバからのアクセスに応じないようになっているかららしい)
2. いよいよAPIを叩いてみよう
2-1. Partition IDを確認する
Partitionとは、操作対象のpoters環境を契約している組織のことです
これをまずは取得しましょう。
以下のコードをエディタに入力してください
サンプルコード
//各種変数の設定を行うスクリプト
const requestHost = "api-hrbc-jp.porterscloud.com" 
const redirectUrl = "https://★★"
const appId = "★★★★★" 
const secret = "★★★★"
const appName = "★★★★"
//上記変数を用いてTokenを取得するスクリプト
function getToken(){
  console.log("Codeを取得します=====")
  let oath_url = 
    "https://"+requestHost
    +"/v1/oauth?app_id="+appId
    +"&redirect_url="+ redirectUrl
    +"&response_type=code_direct"
  var response_oath = UrlFetchApp.fetch(oath_url,{'method' : "get"})
  let response_oath_xml = response_oath.getContentText();
  console.log("Oath認証をクリアしました\nレスポンスは\n"+response_oath_xml)
  let code_infomation = response_oath_xml.match(/<Code>(.*)<\/Code>/);
  let code = code_infomation[1];
  console.log("Codeを抽出しました\n Codeは["+code+"]です")
  console.log("Tokenを取得します=====")
  const grant_type = "oauth_code"
  const getToken_url = 
    "https://"+requestHost+"/v1/token?"
    +"grant_type="+grant_type
    +"&app_id="+appId
    +"&secret="+secret
    +"&code="+code
  const response_getToken = UrlFetchApp.fetch(getToken_url, {'method' : "post"});
  let response_getToken_xml = response_getToken.getContentText()
  let token_infomation = response_getToken_xml.match(/<AccessToken>(.+)<\/AccessToken>/);
  let token = token_infomation[1]
  console.log("Tokenの取得に成功しました\nTokenは["+token+"]です");
  return token  
}
//メインの関数はこれ。
function getPartitionId() {
  var token = getToken()
  var url = root_url + "partition?request_type=1"
  
  var header = {
    'X-porters-hrbc-oauth-token': token
    }
  var option = {
    method: 'get',
    headers: header
  }
  var res = UrlFetchApp.fetch(url,option)
 
  var response_xml = res.getContentText()
  console.log(response_xml)
}

こんな感じでトリガーを設定しましょう

トリガーが実行されると、実行結果にこのようなログが書き込まれます
ここの<Partition.P_Id>と</Partition.P_Id>で囲まれた数字がPartition IDになります
お見事!無事APIを叩くことに成功しました!
次の記事では、実際にporters内のデータを書き出したり、入力したりしてみます