Как получить результаты от udemy api с поиском

У меня та же проблема, что и здесь Как получить результаты от Udemy Api с поиском? на который, к сожалению, нет ответа.

Я могу получить заголовок и т. д., например, по этому URL-адресу https://www.udemy.com/api-2.0/courses/238934/?fields%5Bcourse%5D=@all (вы увидите результаты в своем браузере) этот URL работает а также https://www.udemy.com/api-2.0/search-suggestions?q=java, но не этот https://www.udemy.com/api-2.0/courses/?search=java

Как упоминалось здесь https://www.udemy.com/developers/affiliate/methods/get-courses-list/

получить /api-2.0/courses/?search=java должно работать?

Вот мой код:

$url = "https://www.udemy.com/api-2.0/courses/?search=java";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL,$url);
    $c_id = base64_encode('XXX');
    $c_sid = base64_encode('XXX');

    curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-Udemy-Client-Id: '.$c_id.'','X-Udemy-Client-Secret: '.$c_sid.'',"Authorization: base64 encoded value of client-id:client-secret","Accept: application/json, text/plain, */*"));
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    $result=curl_exec($ch);

    curl_close($ch);

    $result = json_decode($result);

    $title = $result->title;

Если кто-то может, пожалуйста, пролить свет на это.


person Seb    schedule 20.01.2021    source источник
comment
Светить на что? Вы не сообщили нам о конкретной ошибке или проблеме   -  person ADyson    schedule 20.01.2021
comment
Спасибо за ваш ответ. Этот URL не возвращает никаких результатов udemy.com/api-2.0/courses /?search=java, а вот это, например: udemy.com/api-2.0/courses/238934/?fields[course]=@all (если посмотреть в браузере). Таким образом, должен быть способ запросить ленту Udemy без добавления определенного номера курса, такого как /238934/.   -  person Seb    schedule 20.01.2021
comment
Что говорят заголовки ответа? curl_error что-нибудь возвращает?   -  person ADyson    schedule 20.01.2021
comment
Я получил ошибку 403 с этим URL-адресом udemy.com/api-2.0/courses /?search=java, но 200 с этим udemy.com/api-2.0/courses/238934/?fields%5Bcourse%5D=@all , не уверен, что это поможет.   -  person Seb    schedule 20.01.2021
comment
Я также получил 403 в браузере с этим URL. Предположительно, вы должны отправить некоторые учетные данные или иметь действительный сеанс входа в систему, чтобы использовать его.   -  person ADyson    schedule 20.01.2021
comment
хорошо, спасибо, может быть, мой код не работает должным образом. Хотя я могу получить заголовок и т. д. по этому URL-адресу udemy .com/api-2.0/courses/238934/?fields[course]=@all. Я не уверен, почему код будет работать с некоторыми URL-адресами, а не с некоторыми другими. В общем, либо есть доступ к API, либо нет.   -  person Seb    schedule 20.01.2021
comment
Не обязательно. Это зависит от поставщика API. Они могут сделать некоторые данные общедоступными, а некоторые нет. Это полностью их решение. Если для этого API есть документация, вы сможете проверить, как вы должны проходить аутентификацию с его помощью, и какие конечные точки требуют аутентификации, а какие нет.   -  person ADyson    schedule 20.01.2021
comment
Спасибо, но в документе нет подсказок. udemy.com/developers/affiliate/methods/get-courses-list   -  person Seb    schedule 20.01.2021
comment
Не напрямую, хотя он показывает вам заголовки авторизации. Однако udemy.com/developers/affiliate объясняет это более четко. Кажется, вы можете либо отправить идентификатор клиента и секрет в форме основного протокола аутентификации, или отправить заголовок авторизации, содержащий комбинацию этих двух полей в кодировке base64. Вы не делаете ни того, ни другого. Я не знаю, откуда вы взяли идею для заголовков X-Udemy-Client-Id и X-Udemy-Client-Secret? И очевидно, что base64 encoded value of client-id:client-secret не является правильным значением для заголовка авторизации.   -  person ADyson    schedule 20.01.2021
comment
stackoverflow.com/a/2140445/5947043 показывает, как вы выполняете базовую аутентификацию с помощью cURL/PHP. И php.net/manual/en/function.base64-encode.php показывает вам, как что-то кодировать в base64 - я думаю, вы уже знаете это на самом деле, но по какой-то причине вы закодировали идентификатор и секрет отдельно, а не в виде одной строки, и вы не использовали значение в заголовке авторизации. Теперь вы просто выбираете, какой подход использовать... это не имеет значения.   -  person ADyson    schedule 20.01.2021


Ответы (1)


Основываясь на комментариях ADyson, вот ответ (просто обновите код, указав свой собственный clientID и clientSecret ID от Udemy):

Я в основном обновил CURLOPT_HTTPHEADER:

Код:

    $url = "https://www.udemy.com/api-2.0/courses/?search=java";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL,$url);

//HTTP username.
$clientID = 'XXX';
//HTTP password.
$clientSecret = 'XXX';
//Create the headers array.
$headers = array(
    'Content-Type: application/json',
    'Authorization: Basic '. base64_encode("$clientID:$clientSecret")
);
//Set the headers that we want our cURL client to use.
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    $result=curl_exec($ch);
   // echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
   // echo curl_getinfo($ch,CURLINFO_HTTP_CODE);

    curl_close($ch);

    $json = json_decode($result, true);
    
   // return $result; 
   foreach($json['results'] as $results) {

$title = $results['title'];
 
echo $title.'<br>';

}

Результаты: (названия курсов на основе этого поиска: https://www.udemy.com/api-2.0/courses/?search=java)

Мастер-класс по программированию на Java для разработчиков программного обеспечения

Программирование на Java для начинающих

Java In-Depth: станьте полноценным Java-инженером!

Полный сертификационный курс Java

И т.п.

person Seb    schedule 21.01.2021