2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

サイボウズOffice10 から curl + SOAPでスケジュールの取得

Last updated at Posted at 2020-09-30

#はじめに
サイボウズ Office10 連携APIで個人スケジュールを取り出すメモです。
ただ、執筆時点では ドキュメントの配布終了 されてるのでGaroon(ガルーン)のSOAP APIドキュメントを上手に参考にするのがいいです。(過去にAPIドキュメントを取得しされていたら大切に保管ください。)

SOAPでのXML問い合わせと結果XMLの受け取りをHTTPで行う処理なのでコア部分がわかるようにcurlコマンドで表します。

#ユーザID取得とスケジュール取得 curl
問い合わせ先はインストール先によって異なるのですが、私の場合はこちらです。

https://サイボウズサーバ/cgi-bin/cbag/ag.cgi?page=PApiBase
https://サイボウズサーバ/cgi-bin/cbag/ag.cgi?page=PApiSchedule

PApiBaseはユーザの基本情報を取得するAPIで、PApiScheduleはスケジュールを取得するAPIです。取得したい情報に応じてエンドポイントが変わります。
ユーザの基本情報を取得するのはスケジュール取得にユーザ名ではなく6821といった内部のユーザIDを指定する必要があるためです。ユーザIDを知っていたら不要です。

###①ユーザID取得
SOAPはXMLでの情報のやり取りなので、XMLファイルを準備します。認証情報を含める必要があるので、ログイン名とパスワードをつけます。ここではyamada。取得したいユーザもyamadaさんにしています。

base.xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Header>
    <Action soap:mustUnderstand="1" xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">BaseGetUsersByLoginName</Action>
    <Timestamp soap:mustUnderstande="1" xmlns="http://schemas.xmlsoap.org/ws/2002/07/utility">
      <Created>2020-08-12T14:45:00Z</Created>
      <Expires>2021-08-12T14:45:00Z</Expires>
    </Timestamp>
    <Security xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" soap:mustUnderstand="1" xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <UsernameToken>
        <Username>yamada(APIキックするログインID)</Username>
        <Password>password(APIキックするパスワード)</Password>
      </UsernameToken>
    </Security>
  </soap:Header>
  <soap:Body>
    <BaseGetUsersByLoginName xmlns="http://wsdl.cybozu.co.jp/base/2008">
      <parameters xmlns="">
        <login_name>yamada(取得したいログイン名)</login_name>
      </parameters>
    </BaseGetUsersByLoginName>
  </soap:Body>
</soap:Envelope>

XMLファイルをヘッダー付きでサーバにポストします。

curl -H "Content-Type: application/soap+xml; charset=utf-8;" -d "@base.xml" -X POST "https://サイボウズサーバ/cgi-bin/cbag/ag.cgi?page=PApiBase" > response.xml

XMLで返事が返ってきます。

response.xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
 xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:base="http://wsdl.cybozu.co.jp/base/2008"
>
 <soap:Header>
 <vendor>Cybozu</vendor>
 <product>Office</product>
 <version>10.8.0</version>
 <apiversion>1.3.0</apiversion>
 </soap:Header>
 <soap:Body>
 <base:BaseGetUsersByLoginNameResponse>
 <returns>
<user
 key="6831"
 version="1572287113"
 order="1"
 login_name="yamada"
 name="山田 一郎"
 status="0"
 reading="やまだ いちろう"
 url="http://"
 email=""
 primary_organization="1234"
>
<organization
 id="1234"
 xmlns="http://schemas.cybozu.co.jp/base/2008"
/>
</user>
 </returns>
 </base:BaseGetUsersByLoginNameResponse>
 </soap:Body>
</soap:Envelope>

key="6831" がユーザIDになります。

###②ユーザのスケジュールを取得
先程取得したユーザID 6831 を user タグに詰めて問い合わせしています。

schedule.xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Header>
    <Action soap:mustUnderstand="1" xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">ScheduleGetEventsByTarget</Action>
    <Timestamp soap:mustUnderstande="1" xmlns="http://schemas.xmlsoap.org/ws/2002/07/utility">
      <Created>2020-08-12T14:45:00Z</Created>
      <Expires>2021-08-12T14:45:00Z</Expires>
    </Timestamp>
    <Security xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" soap:mustUnderstand="1" xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <UsernameToken>
        <Username>yamada(APIキックするログインID)</Username>
        <Password>password(APIキックするパスワード)</Password>
      </UsernameToken>
    </Security>
  </soap:Header>
  <soap:Body>
    <ScheduleGetEventsByTarget xmlns="http://wsdl.cybozu.co.jp/base/2008">
      <parameters xmlns="" start="2020-09-01T07:00:00" end="2020-09-01T20:00:00"> 
        <user id="6831"></user>
      </parameters>
    </ScheduleGetEventsByTarget>
  </soap:Body>
</soap:Envelope>
curl -H "Content-Type: application/soap+xml; charset=utf-8;" -d "@schedule.xml" -X POST "https://サイボウズサーバ/cgi-bin/cbag/ag.cgi?page=PApiSchedule" > response.xml
response.xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
 xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:schedule="http://wsdl.cybozu.co.jp/schedule/2008"
>
 <soap:Header>
 <vendor>Cybozu</vendor>
 <product>Office</product>
 <version>10.8.0</version>
 <apiversion>1.3.0</apiversion>
 </soap:Header>
 <soap:Body>
 <schedule:ScheduleGetEventsByTargetResponse>
 <returns>
<schedule_event
 id="1394260"
 event_type="normal"
 public_type="public"
 plan=""
 detail="定例会議"
 description=""
 version="1598826939"
 timezone="JST"
 allday="false"
 start_only="false"
>
<members xmlns="http://schemas.cybozu.co.jp/schedule/2008">
 <member>
 <user
 id="6831"
 name="山田 一郎"
 order="1"
 />
 </member>
</members>
<when xmlns="http://schemas.cybozu.co.jp/schedule/2008">
 <datetime
 start="2020-09-01T04:00:00Z"
 end="2020-09-01T04:15:00Z"
 />
</when>
 </schedule_event>
 </returns>
 </schedule:ScheduleGetEventsByTargetResponse>
 </soap:Body>
</soap:Envelope>

以上です。SOAPのXML書式を組み立てるのが大変ですが、書いてしまえば簡単ですね。

#ハマったポイント
ガルーンのドキュメントをみて書式を組み立てたのですが、

 <code>19106</code>
 <diagnosis>不正なパラメータです。</diagnosis>
 <cause>"user_id, group_id, facility_id"パラメータの値が不正です。</cause>
 <counter_measure></counter_measure>
 </soap:Detail>

とエラーになり、

<parameters start="2020-09-01T07:00:00" end="2020-09-01T20:00:00"> 
  <user id="6831"></user>
</parameters>

↓↓↓↓↓↓↓↓↓

<parameters xmlns="" start="2020-09-01T07:00:00" end="2020-09-01T20:00:00"> 
  <user id="6831"></user>
</parameters>

xmlns="" も空で指定すると取得できるようになりました。XMLは厳格ですね。

#まとめ
API(RESTでJSONが多いですね)でHTTP接続ができるプロダクトが当たり前な昨今ですが、古くからSOAPでAPI公開しているサイボウズさんはすごいなと思いました。
問い合わせの要領は上の通りなので、あとは好みのプログラミング言語でプログラムを組み立てていったらよいかと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?