プロジェクト

全般

プロフィール

Bug(バグ) #4453

完了

JSON API activity/mentions.json が GET に対応していない

isao sano さんが4年以上前に追加. ほぼ4年前に更新.

ステータス:
Invalid(無効)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2020-06-22
期日:
進捗率:

0%

予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Yes (はい)

説明

概要

JSON API activity/mentions.json が GET に対応していない


関連するチケット 1 (1件未完了0件完了)

関連している OpenPNE 3 - Task(タスク) #4433: JSON API ドキュメントの見直しと修正Pending Testing(テスト待ち)isao sano2020-04-06

操作

isao sano さんが4年以上前に更新

kaoru n さんが4年以上前に更新

  • 対象バージョンOpenPNE 3.10.x から OpenPNE 3.11.x に変更

isao sano さんが4年以上前に更新

レスポンスステータスは「SUCCESS」となるが内容が空である。

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;
  }

https://github.com/openpne/OpenPNE3/blob/master/apps/api/modules/activity/actions/actions.class.php#L266-L268

    $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

kaoru n さんがほぼ4年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者kaoru n にセット

kaoru n さんがほぼ4年前に更新

  • ステータスAccepted(着手) から Invalid(無効) に変更

activity/mentions.json については、使用できる機能が現状存在しないためドキュメントから削除します

他の形式にエクスポート: Atom PDF