مشاكل في استدعاء واجهة برمجة التطبيقات الخاصة بك باستخدام Node.js

مرحباً بالجميع!

لست متأكداً من التصنيف الصحيح لها، فلا تترددوا في إعادة تصنيفها. بدايةً، شكراً على المساعدة مع سكريبت بايثون الذي يقوم بنفس المهمة مثل السكريبت في Node الذي أكتبه حالياً :clap:t3:. لذا، أحاول إرسال طلب API لتنفيذ استعلام Data Explorer، واستقبال الاستجابة، ثم عرض الرقم الذي أحصل عليه ببساطة. بينما يعمل كود بايثون الخاص بي، وهو هنا:

# Imports

import requests
import json

# Environment Variables

ENDPOINT = 'https://community.myCompanyName.com/admin/plugins/explorer/queries/73/run'
API_KEY = '<api_key>'
API_USERNAME = '<my_username'

# Core Functions

def send_request(endpoint):

    headers = {'Content-Type': 'multipart/form-data', 'Api-Key': API_KEY, 'Api-Username': API_USERNAME}
    request = requests.post(url = endpoint, headers = headers)
    print("Request Status Code: {}".format(request.status_code))

    # Unprocessed API request response

    response = json.loads(request.text)

    response_columns = response["columns"]
    response_rows = response["rows"]

    new_users = response_rows[0][0]
    active_users = response_rows[0][1]
    new_topics = response_rows[0][2]
    employees_replies = response_rows[0][4]
    external_users_replies = response_rows[0][3] - response_rows[0][4]

    response_text = "🤖 Discourse Last Month Stats\nNew Users: {}\nActive Users: {}\nNew Topics: {}\nEmployees Replies: {}\nExternal Users Replies: {}".format(new_users, active_users, new_topics, employees_replies, external_users_replies)

    return response_text

processed_response = send_request(ENDPOINT)

لقد حاولت نقله إلى Node.js لكنني أحصل على رمز حالة 301 - “Moved Permanently”، ويبدو أنه يفعل بالضبط نفس ما يفعله كود بايثون الخاص بي. وهو هنا:

const http = require('http');

const options = {
  hostname: 'community.myCompanyNamee.com',
  path: '/admin/plugins/explorer/queries/73/run',
  method: 'POST',
  headers: {
    'Content-Type': 'multipart/form-data',
    'Api-Key': <api_key>,
    'Api-Username': <my_username>
  }
};

var response = 1;

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);
  response = res;

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

var parsed_response = JSON.parse(response);

ليس لدي خبرة في JS، لذا إذا كان بإمكان أي شخص إلقاء نظرة عليه، فسيكون ذلك رائعاً :slight_smile:

تمت معرفة السبب. إليك كود الحل:


const http = require('https');

const options = {
  hostname: 'community.myCompanyName.com',
  path: '/admin/plugins/explorer/queries/73/run',
  method: 'POST',
  headers: {
    accept: 'application/json',
    'Content-Type': 'multipart/form-data',
    'Api-Key': '<api_key>',
    'Api-Username': '<my_username>'
  }
};

var response = 1;

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);
  response = res;

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

var parsed_response = JSON.parse(response);
console.log(parsed_response);