Laravel 5 PHP Domdocument 400 Плохой запрос

Я получаю file_get_contents(https://soundcloud.com/50_cent/im-the-man-ft-sonny-digital): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request

Я хочу использовать domdocument laravel 5.1, чтобы получить заголовок и идентификатор контента из ссылки на Soundcloud.

Он работал хорошо с URL-адресом YouTube и Vimeo URL, но с Soundcloud он не будет работать.

URL, который я использую:
https://soundcloud.com/50_cent/im-the-man-ft-sonny-digital
только для тестирования.

Это мой код для получения заголовка и идентификатора контента:

                $doc = new \DOMDocument();
$doc->loadHTML(file_get_contents($input_url));
$title = $doc->getElementsByTagName("title")->item(0)->nodeValue;

$tags = get_meta_tags($input_url);
$link_id = $tags['content'];
DB::table('content_add')->insert([
[
'url' => $input_url,
'title' => $title,
'link_id'=> $link_id,
'type' => $type,
'user_id'=> Auth::id(),
'created_at' => Carbon::now(),
],
]);

В конце я просто добавляю его в базу данных.
Также при использовании urlencode() Я получаю эту ошибку file_get_contents(https%3A%2F%2Fsoundcloud.com%2Fgracedmusic%2Fhello-adele): failed to open stream: No such file or directory

Что я делаю неправильно?

2

Решение

Может быть, это поможет, если вы создадите контекст потока для file_get_contents и передать ignore_errors опция установлена ​​в true,

$doc = new \DOMDocument();
$input_url = "https://soundcloud.com/50_cent/im-the-man-ft-sonny-digital";
$options = array(
'http' => array(
'ignore_errors' => true,
'user_agent' => $_SERVER['HTTP_USER_AGENT']
)
);

$context = stream_context_create($options);
$doc = new \DOMDocument();
@$doc->loadHTML(file_get_contents($input_url, false, $context));
$title = $doc->getElementsByTagName("title")->item(0)->nodeValue;

Затем вы можете получить метатеги, проверив атрибуты. Если, например, вам нужен номер из свойства ‘twitter: app: url: googleplay’:

$link_id = '';
$startsWith = 'soundcloud://sounds:';

foreach ($doc->getElementsByTagName("meta") as $meta) {
if ($meta->hasAttribute('property') && $meta->getAttribute('property') === 'twitter:app:url:googleplay') {
$link_id = $meta->getAttribute('content');
if (substr($link_id, 0, strlen($startsWith))) {
$link_id = substr($link_id, strlen($startsWith), strlen($link_id));
break;
}
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]