質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

440閲覧

【GASでAPIを使う】XMLデータをPOSTする方法が知りたい

itsuki0427

総合スコア1

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2022/10/31 08:58

前提

使うもの

PORTERS(ポーターズ)という採用システム

GAS GoogleAppsScript

実現したいこと

  • APIを用いてPORTERSへの求人情報登録を自動化する

この場で解決したいこと

  • XML形式のデータをPOSTする方法が知りたい
  • 現状PythonではうまくPOSTできるのにGASではできないため、GAS用の書き方が間違っているのではないかと考えている

発生している問題・エラーメッセージ

  • 同じPOSTリクエストをPythonで行うとできるのに、

GASで行うと103エラー※が出てしまう

該当のソースコード

GAS版
function postJob() { var token = getToken()//tokenを取得するスクリプト。正しいトークンが取れていることは確認済みです var url = "https://api-hrbc-jp.porterscloud.com/v1/job?partition="+partitionId //partition idはPORTERSに登録している企業が所持しているユニークな4桁の数値。これも間違いがないことを確認済み var data = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Job><Item><Job.P_Id>-1</Job.P_Id><Job.P_Owner>1</Job.P_Owner><Job.P_Client>10004</Job.P_Client><Job.P_Recruiter>10004</Job.P_Recruiter><Job.P_Position>testJob</Job.P_Position></Item></Job>' var header = { 'X-porters-hrbc-oauth-token': token, 'Content-Type':'application/xml; charset=UTF-8' } console.log(header) var option = { "method": "post", "body": data ,//body部分をdata payloadにもしてみたが駄目 "headers": header } console.log(option) var res = UrlFetchApp.fetch( url, option ) var response_xml = res.getContentText() console.log(response_xml) }

本来であれば「<Code>0</Code>」(=成功)が返ってくるはずだが、「<Code>103</Code>」になる
具体的には

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Job><Code>103</Code></Job>
Python版<-こっちだとうまくいく
data = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Job><Item><Job.P_Id>-1</Job.P_Id><Job.P_Owner>1</Job.P_Owner><Job.P_Client>10004</Job.P_Client><Job.P_Recruiter>10004</Job.P_Recruiter><Job.P_Position>testJob</Job.P_Position></Item></Job>' req = requests.post('https://api-hrbc-jp.porterscloud.com/v1/job?partition=9999', data=data.encode('utf-8'), headers={ 'X-porters-hrbc-oauth-token': token, 'Content-Type':'application/xml' }) req.text

結果として下記のように帰ってきて、Code 0=成功。Id 10020=Idが10020の求人が新規作成されたことがしめされている

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Job><Item><Id>10020</Id><Code>0</Code></Item></Job>

その他試したこと

  • GETはできる?
    • できる
  • ほかの情報のPOSTはできる?
    • できない

補足情報

  • PORTERSのAPIの説明(POSTの方法について)

https://hrbcapi.porters.jp/hc/ja/articles/115012160448-Job-Write

  • PORTERSのAPIの説明(エラーコード一覧)

https://hrbcapi.porters.jp/hc/ja/articles/115008171708-Result-Code-List

  • ※PORTERS社からの情報で、GASで直接APIをたたくと不具合が起きることを伝えられています。実行ボタンを直接押すのではなく、トリガー起動することで回避できるらしいのでその方法で実行しました。
  • PythonはGoogleColabを用いています

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

data->payload
に変換したらできました

投稿2022/11/01 13:18

itsuki0427

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問