Project

General

Profile

Bug(バグ) #4453

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

Added by isao sano 12 months ago. Updated 4 months ago.

Status:
Invalid(無効)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2020-06-22
Due date:
% Done:

0%

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

Description

概要

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


Related issues

Related to OpenPNE 3 - Task(タスク) #4433: JSON API ドキュメントの見直しと修正 Pending Testing(テスト待ち) 2020-04-06

History

#1 Updated by isao sano 12 months ago

#2 Updated by kaoru n 12 months ago

  • Target version changed from OpenPNE 3.10.x to OpenPNE 3.11.x

#3 Updated by isao sano 10 months ago

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

#4 Updated by kaoru n 4 months ago

パラメータの順によって、 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: [ ]
}

#5 Updated by kaoru n 4 months ago

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が設定されている必要がある。
現時点で、このような投稿を行う機能はドキュメント製作者においては未確認である。

#6 Updated by kaoru n 4 months ago

#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

#7 Updated by kaoru n 4 months ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to kaoru n

#8 Updated by kaoru n 4 months ago

  • Status changed from Accepted(着手) to Invalid(無効)

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

Also available in: Atom PDF