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=123345678
yと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内のデータを書き出したり、入力したりしてみます