مثال على API مستكشف البيانات في PHP

أنا أعمل على سحب البيانات من Discourse باستخدام PHP وواجهة برمجة تطبيقات Data Explorer. إليك الهيكل الأساسي لشفرة PHP الخاصة بي كنقطة انطلاق للآخرين.

شفرة PHP

<?php
// تعيين مفتاح واجهة برمجة التطبيقات
$api_key = 'مفتاحك هنا';
//
// 1. يجب تعيين $url إلى عنوان URL لمنتدى Discourse الخاص بك
// 2. احصل على رقم الاستعلام الذي تريد تشغيله. قم بتحديث عنوان URL لهذا الاستعلام
//    أي، الاستعلام رقم 5 => .../queries/5/run
//    أي، الاستعلام رقم 47 => .../queries/47/run
$url = 'https://discourse.com/admin/plugins/explorer/queries/7/run';
//
// قم بتحديث معلماتك لتمريرها إلى الاستعلام.
// مثال لمعلمة واحدة - مشفرة بشكل ثابت
// $data = 'params={"user":"fred_smith"}';
// مثال لمعلمة واحدة - تمرير متغير
// $data = 'params={"user":"'.$user.'"}';
// مثال لمعلمتين أو أكثر - تمرير متغير
$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);

?>

استعلام مستكشف البيانات

في مثال الشفرة الذي يستخدم متغيرين تم تمريرهما، بدا رمز مستكشف البيانات الخاص بي كالتالي:

--[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);

شكرا على ملاحظاتك. لقد قمت بتحديث المشاركات الأولية.