Project

General

Profile

Actions

Bug(バグ) #4453

closed

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

Added by isao sano over 4 years ago. Updated almost 4 years ago.

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

0%

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

Description

概要

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


Related issues 1 (1 open0 closed)

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

Actions
Actions #1

Updated by isao sano over 4 years ago

Actions #2

Updated by kaoru n over 4 years ago

  • Target version changed from OpenPNE 3.10.x to OpenPNE 3.11.x
Actions #3

Updated by isao sano over 4 years ago

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

Actions #4

Updated by kaoru n almost 4 years 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: [ ]
}

Actions #5

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

Updated by kaoru n almost 4 years 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

Actions #7

Updated by kaoru n almost 4 years ago

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

Updated by kaoru n almost 4 years ago

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

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

Actions

Also available in: Atom PDF