SASでATND APIからデータを取得する


SAS University Editionを使って、ATND APIからイベントのデータを取得します。

※ANTD APIについてはこちらを参照
ATND API

今回はJapan.R 2014の参加者一覧を取得してみます。

XMLのレスポンス

http://api.atnd.org/events/users/?event_id=58624
このようにイベントIDを指定すると、以下のようなXMLが返ってきます。

xml
<?xml version="1.0" encoding="UTF-8"?>
<hash>
  <results_returned type="integer">1</results_returned>
  <results_start type="integer">1</results_start>
  <events type="array">
    <event>
      <event_id type="integer">58624</event_id>
      <title>Japan.R 2014</title>
      <event_url>http://atnd.org/events/58624</event_url>
      <limit type="integer">150</limit>
      <accepted type="integer">150</accepted>
      <waiting type="integer">47</waiting>
      <updated_at type="datetime">2014-11-07 12:39:33 +0900</updated_at>
      <users type="array">
        <user>
          <user_id type="integer">157031</user_id>
          <nickname>okay0502</nickname>
          <twitter_id>0kayu</twitter_id>
          <status type="integer">1</status>
        </user>
        <user>
          <user_id type="integer">132354</user_id>
          <nickname>yamakatu</nickname>
          <twitter_id>yamakatu</twitter_id>
          <status type="integer">1</status>
        </user>
        (以下略)

mapファイルの作成

参加者情報はusersタグ以下にあるので、必要な項目が取得できるように定義ファイルを作成します。

atnd_users.map
<?xml version="1.0" ?>
<SXLEMAP version="1.2">
    <TABLE name="users">
        <TABLE-PATH syntax="XPATH">
            /hash/events/event/users/user
         </TABLE-PATH>

        <COLUMN name="user_id">
            <PATH>
                /hash/events/event/users/user/user_id
            </PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
            <LENGTH>8</LENGTH>
        </COLUMN>

        <COLUMN name="nickname">
            <PATH>
                /hash/events/event/users/user/nickname
            </PATH>
            <TYPE>character</TYPE>
            <DATATYPE>string</DATATYPE>
            <LENGTH>50</LENGTH>
        </COLUMN>

        <COLUMN name="twitter_id">
            <PATH>
                /hash/events/event/users/user/twitter_id
            </PATH>
            <TYPE>character</TYPE>
            <DATATYPE>string</DATATYPE>
            <LENGTH>50</LENGTH>
        </COLUMN>

        <COLUMN name="status">
            <PATH>
                /hash/events/event/users/user/status
            </PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
            <LENGTH>8</LENGTH>
        </COLUMN>

  </TABLE>
</SXLEMAP>

SASプログラム

データ取得用のSASプログラムがこちらです。
上で作成したmapファイルはSAS University EditionのホームディレクトリであるmyfoldersにATNDディレクトリを作成し、その中に格納してあります。

atnd_api.sas
filename atnd_xml url "http://api.atnd.org/events/users/?event_id=58624";
filename atnd_map "/folders/myfolders/ATND/atnd_users.map";
libname atnd_xml xml xmlmap = atnd_map;

proc print data = atnd_xml.users;
run;

実行結果

できました。