PHP - Data Explorer APIの例

PHP と Data Explorer API を使用して Discourse からデータを取得しています。以下は、他の人が開始点として使用できる PHP コードのスケルトンです。

PHP コード

<?php
// API キーを設定
$api_key = 'ここにキーを入力';
//
// 1. $url は Discourse フォーラムの URL に設定する必要があります
// 2. 実行したいクエリ番号を取得します。そのクエリの URL を更新します
//    例: クエリ #5 => .../queries/5/run
//    例: クエリ #47 => .../queries/47/run
$url = 'https://discourse.com/admin/plugins/explorer/queries/7/run';
//
// クエリに渡すパラメータを更新します。
//  1 つのパラメータの例 - ハードコーディング
//  $data = 'params={\"user\":\"fred_smith\"}';
//  1 つのパラメータの例 - 変数を渡す
//  $data = 'params={\"user\":\"'.$user.'\"}';
//  2 つ以上のパラメータの例 - 変数を渡す
$data = 'params={\"user\":\"'.$user.'\",\"term\":\"'.$term.'\"}';
//
// Curl コマンド
//
$headers = array("Content-Type: multipart/form-data;", "Api-Key: $api_key", "Api-Username: system");
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$result = curl_exec($ch);
if (curl_errno($ch) !== 0) {
   // エラーを処理し、curl_close($ch) を呼び出して返します。
}
curl_close($ch);
//
// curl の結果を PHP 配列に変換してプログラムで操作できるようにします
$result_array = json_decode($result, true);

print($result_array);

?>

Data Explorer クエリ

2 つの変数を渡すコードの例では、私の Data Explorer コードは次のようになりました。

--[params]
-- string :term
-- string :user

SELECT users.username, posts.id, uploads.url, topics.title
     FROM upload_references
     JOIN uploads ON uploads.id = upload_references.upload_id
     JOIN posts   ON posts.id   = upload_references.target_id
     JOIN topics  ON topics.id  = posts.topic_id
     JOIN users   ON posts.user_id = users.id
    WHERE (posts.cooked like '%' || :term || '%'
       OR topics.title like '%' || :term || '%')
      AND users.username_lower like '%' || :user || '%'
      AND topics.archetype = 'regular'
 ORDER BY uploads.created_at DESC
 limit 10

これで誰かがプロジェクトをジャンプスタートするのに役立つことを願っています。

「いいね!」 3

読みやすくするために、ほとんどのコメントを削除することをお勧めします :slight_smile:

以下のようなコメントは不要です。

// 結果を取得
//
$result = curl_exec( $ch );

または

// curlセッションを閉じる
curl_close( $ch );

また、バッククォートの最初の行に言語名を追加することで、構文のハイライトを設定できることを知っておくと良いでしょう。

```php
$headers = array("Content-Type: multipart/form-data;","Api-Key: $api_key","Api-Username: system",);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
```

以下のようにレンダリングされます。

$headers = array("Content-Type: multipart/form-data;","Api-Key: $api_key","Api-Username: system",);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

フィードバックありがとうございます。最初の投稿を更新しました。