[radian6] Radian6 APIについてまとめてみた
※はじめに断っておきますが、今回の手順ではRadian6及びMarketing Cloud(exacttarget)のアカウントが必要になります。
最近、radian6 APIの使い方について質問される機会が増えたので、そろそろブログにまとめておきます。
radian6 APIで最初に躓くのはApp Centerの存在でしょうか。
App CenterとはMarketing Cloud(exacttarget)のサードパーティアプリケーションやAPIインテグレーションのためのアプリケーションを作成する場所で今のところradian6のAPIを叩く場合もこちらで作成したアプリケーションが必要になります。
App CenterにAPI Integration Appを作成
まず、App Centerにアクセスしてユーザ登録します(App Centerの登録は無料です)
ユーザ登録完了してログインすると以下のようなホーム画面が表示されるので”Create New App”をクリックします。
次にアプリケーションタイプを選択する画面が表示されますので”API Integration”を選択します。
次にアプリ名やパッケージ名を入力します(パッケージ名はユニークらしいけど…どの範囲で?)
次に作成するアプリをMarketing Cloud(exacttarget)へ接続する設定をするために”Link to Account”をクリックします。
するとMarketing Cloud(exacttarget)のログイン画面が開きますのでログインします(ちなみに現在はDeveloper Edisionの取得には問い合わせが必要?なようです)
ログインすると”Integrate”ボタンが表示されるのでクリックします。
するとApp Centerに戻ってMarketing Cloud(exacttarget)へのデータアクセス権限設定画面に遷移するので適切に設定します(今回はradian6 API叩くので関係ないのですが何もチェックしないと先に進めないので適当にチェックします)
以上でアプリの作成は完了です。”Finish”をクリックします。
実際にradian6 APIを叩くのに必要な情報はアプリケーション詳細画面に表示される”Application ID”になります。
ちなみに以上のことはSalesforce-Marketing-Cloud-Developer-Edition-Recipesにもまとめられてます。
実際にradian6 APIを叩いてみる手順は以下
Radian6 API documentationで最もニーズのありそうなユースケースを以下に抜粋してみました。
- Authenticateリソースでauthentication tokenを取得する
- Get Topic ProfilesリソースでTopic Profileリストを取得する
- Get Post Dataリソースで指定したTopic ProfileのPost Dataを取得する
- 3と同様の方法でPost Dataを期間指定で取得する
Topic ProfileとはRadian6の管理画面でソーシャルデータの抽出条件(キーワードやメディアタイプ)を保存しておくような機能で、APIでも基本的に任意のTopic Profileをベースにアクセスします。
もちろん、ベースとしているTopic Profileの抽出条件をAPIアクセスで上書きすることも可能です。
以降、順にやってみます。
authentication tokenを取得
Authenticateリソースはauthentication tokenを取得するために利用します。
[html]
GET /socialcloud/v1/auth/authenticate
[/html]
curlで以下のようにauthentication tokenを取得してみます。
auth_appkeyはApp Centerで作成したアプリのApplication IDです。
[html]
curl "https://api.radian6.com/socialcloud/v1/auth/authenticate" \
-H "auth_user: {Radian6 Login User ID}" \
-H "auth_pass: {Radian6 Login Password}" \
-H "auth_appkey: 53b6897c-32dd…"
[/html]
レスポンスは以下のような感じです。
<token>...</token>
文字列は次のGet Topic Profilesリクエストでauth_tokenとして使用します。
[html]
<auth>
<token>
0a0c020103080d06…
</token>
<UserDetails>
…
</UserDetails>
</auth>
[/html]
詳細: radian6 – Authentication Service
Topic Profileリストを取得
Get Topic ProfilesリソースはTopic Profilesリストを取得するために利用します。
[html]GET /socialcloud/v1/auth/topics[/html]
curlで以下のようにTopic Profileリストを取得してみます。
[html]
curl "https://api.radian6.com/socialcloud/v1/topics" \
-H "auth_token: 0a0c020103080d06…" \
-H "auth_appkey: 53b6897c-32dd…"
[/html]
レスポンスは以下のような感じです。
<topicFilters><topicFilter><topicFilterId>...</topicFilterId></topicFilter></topicFilters>
文字列は次のGet Post DataリクエストでTopic Profile IDとして使用します。
[html]
<topicFilters>
<topicFilter>
<name>
<![CDATA[API Test]]>
</name>
<public>1</public>
<status>1</status>
<estimateVolume>5100</estimateVolume>
<competeEnabled>0</competeEnabled>
<topicFilterTypeId>1</topicFilterTypeId>
<bCode>
<![CDATA[]]>
</bCode>
<creatorId>5…8</creatorId>
<creatorName>
<![CDATA[Brian Murphy]]>
</creatorName>
<creatorEmail>Brian.Murphy@…</creatorEmail>
<createDate>20110120</createDate>
<topicFilterId>2…0</topicFilterId>
<inboundOnTopicLinksCount>0</inboundOnTopicLinksCount>
<languages/>
<mediaType/>
<projects/>
<regions/>
<deactivationDate>null</deactivationDate>
<activeUpdatedDate>Aug 30, 2011 11:50 AM</activeUpdatedDate>
<activePreviousState>3</activePreviousState>
<currentOrder>
<topicFilterOrder>
<orderId>1..9</orderId>
<action>0</action>
<transactionDate>Jul 18, 2011 03:00 AM</transactionDate>
<topicFilterName>
<![CDATA[API Test]]>
</topicFilterName>
<topicFilterId>2…0</topicFilterId>
<topicFilterCreateDate>20110718</topicFilterCreateDate>
<topicFilterDeactivationDate>Jul 18, 2011 03:00 AM</topicFilterDeactivationDate>
<currentEMV>2100</currentEMV>
<daysOfHistoricalData>208</daysOfHistoricalData>
<competeEnabled>false</competeEnabled>
<user>
<userId>5…8</userId>
<displayName>
<![CDATA[Brian Murphy]]>
</displayName>
<emailAddress>Brian.Murphy@radian6…</emailAddress>
<timezone>GMT</timezone>
<packages/>
<userRoleId>1</userRoleId>
<createdDate>Nov 19, 2011 11:58 PM</createdDate>
<enabled>true</enabled>
<aihUsers/>
</user>
<billingNote>
<![CDATA[]]>
</billingNote>
<topicFilterXml/>
</topicFilterOrder>
</currentOrder>
<evp>false</evp>
<topicFilterTier>
<topicFilterTierId>1</topicFilterTierId>
<name>Tier 1</name>
<lowerTrafficLimit>0</lowerTrafficLimit>
<upperTrafficLimit>10000</upperTrafficLimit>
</topicFilterTier>
<number_queries>1</number_queries>
<filterGroups>
<filterGroup>
<filterGroupId>2…8</filterGroupId>
<name>
<![CDATA[Group 1]]>
</name>
<filterGroupTypeId>1</filterGroupTypeId>
<filterQueries>
<filterQuery>
<query>
<![CDATA["the animals"]]>
</query>
<filterQueryId>2…1</filterQueryId>
<filterQueryTypeId>0</filterQueryTypeId>
</filterQuery>
</filterQueries>
</filterGroup>
</filterGroups>
<sentimentQueries/>
<includeSourceFilterList>
<filterIds/>
</includeSourceFilterList>
<excludeSourceFilterList>
<filterIds/>
</excludeSourceFilterList>
<includeAllSourceFilterList>
<filterIds/>
</includeAllSourceFilterList>
</topicFilter>
.
.
.
</topicFilters>
[/html]
詳細: radian6 – Topic Service
Post Dataを取得
Get Post Dataリソースは指定したTopic ProfileのPost Dataを取得するために利用します。
[html]GET /data/topicdata/realtime/{recentXhours}/{topics}/{mediatypes}/{pageIndex}/{pageSize}[/html]
- リクエストパラメータ説明
- recentXhours: “X時間前”のXを指定する
- topics: Topic Profile ID
- mediatypes: メディアタイプを指定
- 1 – Blogs
- 2 – Videos
- 4 – Images
- 5 – Mainstream News
- 8 – Twitter
- 9 – Forum Replies
- 10 – Forums
- 11 – Comments
- 12 – Facebook
- 13 – Aggregator
- 14 – Buy/Sell
- 16 – MySpace
- pageIndex: レスポンスのページ番号を指定
- pageSize: レスポンスの1ページあたりのデータ数を指定(Max: 1,000)
- Topic Profile IDとはGet Topic Profilesで取得したtopicFilterIdのこと
- メディアタイプはradian6 – Lookup ServiceによってAPIから取得可能
curlで以下のように指定したTopic ProfileのPost Dataを取得してみます。
[html]
curl "http://api.radian6.com/socialcloud/v1/data/topicdata/realtime/1/2…0/8/1/20" \
-H "auth_token: 0a0c020103080d06…" \
-H "auth_appkey: 53b6897c-32dd…"
[/html]
レスポンスは以下のような感じです。
[html]
<radian6_RiverOfNews_export>
<report_date>2012-07-11 02:24:04 +1200</report_date>
<user_name>Brian.Murphy@…</user_name>
<RoN_sort_order>publishedDate</RoN_sort_order>
<article_count>2</article_count>
<total_article_count>101</total_article_count>
<article ID="2…9">
<description charset="UTF-8">
<headline/>
<author fbid="-1" externalId="3…2"/>
<author_full_name />
<recipient/>
<content/>
<external_id>2…73</external_id>
<parentExternalId>2…70</parentExternalId>
</description>
<avatar/>
<source/>
<host>
<![CDATA[twitter.com]]>
</host>
<article_url>
<![CDATA[2…73]]>
</article_url>
<media_provider>TWITTER</media_provider>
<media_type_id>8</media_type_id>
<language_id>16</language_id>
<spam_rating>0</spam_rating>
<publish_date epoch="1341901361000">2012-07-10 18:22:41 +1200</publish_date>
<harvest_date epoch="1341901379000">2012-07-10 18:22:59 +1200</harvest_date>
<PostInsights>
<PostInsight>
<Provider>
<![CDATA[provider_name]]>
</Provider>
<Type>
<![CDATA{type_name]]>
</Type>
<Value>
<![some_value]]>
</Value>
</PostInsight>
</PostInsights>
<SourceInsights>
<SourceInsight>
<Provider>
<![CDATA[provider_name]]>
</Provider>
<Type>
<![CDATA[type_name]]>
</Type>
<Value>
<![CDATA[some_value]]>
</Value>
<SourceInsight>
</SourceInsights>
<PostDynamicsIteration>
<PostDynamicsDefinition>
<fieldId>9</fieldId>
<label>Following</label>
<value/>
<sortOrder>1</sortOrder>
</PostDynamicsDefinition>
<PostDynamicsDefinition>
<fieldId>8</fieldId>
<label>Followers</label>
<value/>
<sortOrder>2</sortOrder>
</PostDynamicsDefinition>
<PostDynamicsDefinition>
<fieldId>10</fieldId>
<label>Updates</label>
<value/>
<sortOrder>3</sortOrder>
</PostDynamicsDefinition>
<PostDynamicsDefinition>
<fieldId>21</fieldId>
<label>Sentiment</label>
<shortLabel>S</shortLabel>
<sortOrder>4</sortOrder>
<value/>
<exceptionValue>2860,false</exceptionValue>
<reportValue>Neutral</reportValue>
<tooltip/>
</PostDynamicsDefinition>
<reportFormatedData/>
</PostDynamicsIteration>
</article>
<article ID="252359343">
<description charset="UTF-8">
<headline>
<![CDATA[Post from Facebook user]]>
</headline>
<author fbid="1769972299" externalId="1769972299">
<![CDATA[Facebook user]]>
</author>
<recipient>
<![CDATA[None]]>
</recipient>
<content>
<![CDATA[Facebook post content…]]>
</content>
<external_id>17…9_22…4</external_id>
</description>
<source ID="1…2">
<![CDATA[Post from Facebook user]]>
</source>
<host>
<![CDATA[www.facebook.com]]>
</host>
<article_url>
<![CDATA[http://www.facebook.com/permalink.php?story_fbid=22…4&id=17…9]]>
</article_url>
<media_provider>facebook.com Discussions</media_provider>
<media_type_id>12</media_type_id>
<language_id>1</language_id>
<spam_rating>0</spam_rating>
<publish_date epoch="1341886037000">2012-07-10 14:07:17 +1200</publish_date>
<harvest_date epoch="1341886905000">2012-07-10 14:21:45 +1200</harvest_date>
<PostDynamicsIteration>
<PostDynamicsDefinition>
<fieldId>21</fieldId>
<label>Sentiment</label>
<shortLabel>S</shortLabel>
<sortOrder>1</sortOrder>
<value>
<![CDATA[2860,0]]>
</value>
<exceptionValue>2860,false</exceptionValue>
<reportValue>Neutral</reportValue>
<tooltip/>
</PostDynamicsDefinition>
<reportFormatedData>
<![CDATA[<span style="font-weight:bold; color: #FF9900; font-size: 11pt"> Sentiment: </span>Neutral ]]>
</reportFormatedData>
</PostDynamicsIteration>
</article>
</radian6_RiverOfNews_export>
[/html]
詳細: radian6 – Data Service
Post Dataを期間指定取得
Get Post Dataリソースで指定したTopic ProfileのPost Dataを期間指定で取得するには以下のようにします。
[html]GET /data/topicdata/realtime/{daterangeStart}/{daterangeEnd}/{topics}/{mediatypes}/{pageIndex}/{pageSize}[/html]
- リクエストパラメータ説明
- daterangeStart: 抽出開始日時をUNIXタイムスタンプ(ミリ秒:13桁)で指定
- daterangeEnd: 抽出終了日時をUNIXタイムスタンプ(ミリ秒:13桁)で指定
- topics: Topic Profile ID
- mediatypes: メディアタイプを指定
- 1 – Blogs
- 2 – Videos
- 4 – Images
- 5 – Mainstream News
- 8 – Twitter
- 9 – Forum Replies
- 10 – Forums
- 11 – Comments
- 12 – Facebook
- 13 – Aggregator
- 14 – Buy/Sell
- 16 – MySpace
- pageIndex: レスポンスのページ番号を指定
- pageSize: レスポンスの1ページあたりのデータ数を指定(Max: 1,000)
- Topic Profile IDとはGet Topic Profilesで取得したtopicFilterIdのこと
- メディアタイプはradian6 – Lookup ServiceによってAPIから取得可能
curlで以下のように指定したTopic ProfileのPost Dataを取得してみます。
[html]
curl "http://api.radian6.com/socialcloud/v1/data/topicdata/realtime/1422716400000/1425135599000/2…0/8/1/20" \
-H "auth_token: 0a0c020103080d06…" \
-H "auth_appkey: 53b6897c-32dd…"
[/html]
レスポンスは以下は以下のような感じです。
[html]
<radian6_RiverOfNews_export>
<report_date>2012-07-11 02:24:04 +1200</report_date>
<user_name>Brian.Murphy@…</user_name>
<RoN_sort_order>publishedDate</RoN_sort_order>
<article_count>2</article_count>
<total_article_count>101</total_article_count>
<article ID="2…9">
<description charset="UTF-8">
<headline/>
<author fbid="-1" externalId="3..2"/>
<author_full_name />
<recipient/>
<content/>
<external_id>22..3</external_id>
<parentExternalId>22..2</parentExternalId>
</description>
<avatar/>
<source/>
<host>
<![CDATA[twitter.com]]>
</host>
<article_url>
<![CDATA[22..3]]>
</article_url>
<media_provider>TWITTER</media_provider>
<media_type_id>8</media_type_id>
<language_id>16</language_id>
<spam_rating>0</spam_rating>
<publish_date epoch="1341901361000">2012-07-10 18:22:41 +1200</publish_date>
<harvest_date epoch="1341901379000">2012-07-10 18:22:59 +1200</harvest_date>
<PostInsights>
<PostInsight>
<Provider>
<![CATA[provider_name]]>
</Provider>
<Type>
<![CATA[<em>type_name</em>]]>
</Type>
<Value>
<![CATA[some_<i>value</i>]]>
</Value>
</PostInsight>
</PostInsights>
<SourceInsights>
<SourceInsight>
<Provider>
<![CATA[<em>provider_name</em>]]>
</Provider>
<Type>
<![CATA[<em>type_name</em>]]>
</Type>
<Value>
<![CATA[some_<em>value</em>]]>
</Value>
</SourceInsight>
</SourceInsights>
<PostDynamicsIteration>
<PostDynamicsDefinition>
<fieldId>9</fieldId>
<label>Following</label>
<value/>
<sortOrder>1</sortOrder>
</PostDynamicsDefinition>
<PostDynamicsDefinition>
<fieldId>8</fieldId>
<label>Followers</label>
<value/>
<sortOrder>2</sortOrder>
</PostDynamicsDefinition>
<PostDynamicsDefinition>
<fieldId>10</fieldId>
<label>Updates</label>
<value/>
<sortOrder>3</sortOrder>
</PostDynamicsDefinition>
<PostDynamicsDefinition>
<fieldId>21</fieldId>
<label>Sentiment</label>
<shortLabel>S</shortLabel>
<sortOrder>4</sortOrder>
<value/>
<exceptionValue>2860,false</exceptionValue>
<reportValue>Neutral</reportValue>
<tooltip/>
</PostDynamicsDefinition>
<reportFormatedData/>
</PostDynamicsIteration>
</article>
<article ID="2…3">
<description charset="UTF-8">
<headline>
<![CDATA[Post from Facebook user]]>
</headline>
<author fbid="17..9" externalId="17..9">
<![CDATA[Drikus Maree]]>
</author>
<recipient>
<![CDATA[None]]>
</recipient>
<content>
<![CDATA[Facebook post content…]]>
</content>
<external_id>17…9_22..4</external_id>
</description>
<source ID="1…2">
<![CDATA[Post from Facebook user]]>
</source>
<host>
<![CDATA[www.facebook.com]]>
</host>
<article_url>
<![CDATA[http://www.facebook.com/permalink.php?story_fbid=22…4&id=17…9]]>
</article_url>
<media_provider>facebook.com Discussions</media_provider>
<media_type_id>12</media_type_id>
<language_id>1</language_id>
<spam_rating>0</spam_rating>
<publish_date epoch="1341886037000">2012-07-10 14:07:17 +1200</publish_date>
<harvest_date epoch="1341886905000">2012-07-10 14:21:45 +1200</harvest_date>
<PostDynamicsIteration>
<PostDynamicsDefinition>
<fieldId>21</fieldId>
<label>Sentiment</label>
<shortLabel>S</shortLabel>
<sortOrder>1</sortOrder>
<value>
<![CDATA[2860,0]]>
</value>
<exceptionValue>2860,false</exceptionValue>
<reportValue>Neutral</reportValue>
<tooltip/>
</PostDynamicsDefinition>
<reportFormatedData>
<![CDATA[<span style="font-weight:bold; color: #FF9900; font-size: 11pt"> Sentiment: </span>Neutral ]]>
</reportFormatedData>
</PostDynamicsIteration>
</article>
</radian6_RiverOfNews_export>
[/html]
ご覧のようにレスポンスは今のところXMLのみです。