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 쿼리

두 개의 전달 변수를 사용한 코드 예시에서, 제 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

이 정보가 누군가의 프로젝트 시작에 도움이 되기를 바랍니다.

가독성을 높이기 위해 대부분의 주석을 줄이는 것이 좋습니다 :slight_smile:
일부 주석은 불필요한데, 예를 들어:

// Obtain result
//
$result = curl_exec( $ch );

또는

// close curl session
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);

피드백 감사합니다. 초기 게시글을 수정했습니다.