Bug(バグ) #4453
完了JSON API activity/mentions.json が GET に対応していない
isao sano さんが4年以上前に追加. ほぼ4年前に更新.
0%
kaoru n さんがほぼ4年前に更新
パラメータの順によって、 curl の結果が変わる
(1) count, apiKey の場合
$ curl http://{snip}/api.php/activity/mentions.json?count=10&apiKey={snip} $ 401 Unauthorized: apiKey parameter not specified.
(2) apiKey, count の場合
$ curl http://{snip}/api.php/activity/mentions.json?apiKey={snip}&count=10 $ {"status":"success","data":[]}
ブラウザでアクセスした場合は、どちらの場合も
{ status: "success", data: [ ] }
kaoru n さんがほぼ4年前に更新
https://houou.github.io/api.php/activity_mentions.html
には
activity/mentions.json 概要 自分のスクリーンネームが含まれているメンションタイムラインを取得してきます。
と記載があるが、スクリーンネームは opTimelinePlugin のすでに削除された機能。
また、この API は、テンプレートを使用し且つ template_param に指定された API Key を持つメンバーIDが本文に設定されている投稿を検索する機能。
https://github.com/openpne/OpenPNE3/blob/master/lib/util/opActivityQueryBuilder.class.php#L248-L260
protected function buildMentionQuery($query)
{
$friendQuery = $this->buildFriendQuery($query->createSubquery())
->andWhereLike('a.template_param', '|'.$this->viewerId.'|');
$snsQuery = $this->buildAllMemberQuery($query->createSubquery())
->andWhereLike('a.template_param', '|'.$this->viewerId.'|');
$subQuery = array_map(array($this, 'trimSubqueryWhere'), array($friendQuery, $snsQuery));
$query->andWhere(implode(' OR ', $subQuery));
return $query;
}
$query = $builder->buildQuery()
->andWhere('in_reply_to_activity_id IS NULL')
->andWhere('foreign_table IS NULL')
->andWhere('foreign_id IS NULL')
->limit(20);
opDiaryPlugin, opCommunityTopicPlugin では、テンプレートを使用して自動投稿を行うが、メンバーIDは埋め込まない。
参考: #2773
opCommunityTopicPlugin の activity_template.yml: https://github.com/tejimaya/opCommunityTopicPlugin/blob/master/config/activity_template.yml
opDiaryTopicPlugin の activity_template.yml: https://github.com/tejimaya/opDiaryPlugin/blob/master/config/activity_template.yml
#4453-3 にて
レスポンスステータスは「SUCCESS」となるが内容が空である。
とされているが、これは template_param の値に「|{指定された API Key を持つメンバーID}|」が含まれていないため。
#4453-4 に記載した通り、curl実行時のパラメータ順が影響している件について修正が必要。
またJSON APIドキュメントに下記のような注釈が必要だと思います。
このAPIを利用してデータ取得を行うには、投稿時にテンプレートを利用し、且つ「template_param」に、スクリーンネームではなくメンバーIDが設定されている必要がある。 現時点で、このような投稿を行う機能はドキュメント製作者においては未確認である。
kaoru n さんがほぼ4年前に更新
#4453-4 に記載した通り、curl実行時のパラメータ順が影響している件について修正が必要。
curl でリクエストを投げる際に複数パラメータを「&」でつないで渡す場合は、「&」をエスケープしなければいけないようです。
参照: https://hkdnet.hatenablog.com/entry/2015/09/19/133415
複数パラメータを利用している場合URLの&がシェルの&(バックグラウンドプロセス)と競合してしまい、違うコマンドとして認識されてしまう。
であるので、ドキュメントの修正のみで良さそうです。
$ curl http://{snip}/api.php/activity/mentions.json?count=10\&apiKey={snip} $ curl http://{snip}/api.php/activity/mentions.json?apiKey={snip}\&count=10