2016-05-06 9 views
0

Я хочу захватить URL-адрес произведения, связанного с дорожкой Soundcloud, с простым PHP без использования их API. HTML-страница имеет свойство метатега og:image, которое идеально подходит для моих нужд.Grab Soundcloud с простым PHP

Например, мета свойство дорожки https://soundcloud.com/dengue/sets/nuevos-sonidos выглядит следующим образом:

<meta property="og:image" content="https://i1.sndcdn.com/artworks-000077991135-u5nvu1-t500x500.jpg"> 

Проблема заключается в том, что запрос HTTP возвращает 301 Moved Permanently код и поэтому использование класса DOMDocument loadHTMLFile функция выдает ошибку.

+0

использовать их апи: https://developers.soundcloud.com/ –

+0

у вас есть причины не желая использовать их API? –

ответ

1

Если вы действительно не хотите, чтобы use their API (что кажется плохим вызовом, потому что вам не нужно делать НИКАКИЕ auth, он полностью открыт), вы можете сделать несколько простых взломов.

Я не получаю никаких редиректов от Curl

~ $ curl -v https://soundcloud.com/dengue/sets/nuevos-sonidos 
* Trying 68.232.44.127... 
* Connected to soundcloud.com (68.232.44.127) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 
* Server certificate: *.soundcloud.com 
* Server certificate: GlobalSign Domain Validation CA - SHA256 - G2 
* Server certificate: GlobalSign Root CA 
> GET /dengue/sets/nuevos-sonidos HTTP/1.1 
> Host: soundcloud.com 
> User-Agent: curl/7.43.0 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Cache-Control: private, max-age=0 
< Content-Type: text/html 
< Date: Sat, 07 May 2016 03:42:20 GMT 
< Server: am/2 
< Set-Cookie: sc_anonymous_id=363279-961735-991413-425081; path=/; expires=Tue, 05 May 2026 03:42:20 GMT; domain=.soundcloud.com 
< Via: sssr 
< X-Frame-Options: SAMEORIGIN 
< Content-Length: 47003 
< 

Но если вы, вы просто должны добавить эту опцию, прежде чем сделать завиток из PHP:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

Если вы серьезно относитесь к хакерскому бизнесу, почему бы вам просто не сделать это:

<?php 

$url = `curl -L https://soundcloud.com/dengue/sets/nuevos-sonidos 2>/dev/null | grep 'og:image' | sed 's/.*og:image" content="\\([^"]*\\).*/\\1/'`; 

echo $url; 

Что делает этот

~/Code/stack-overflow $ php hack.php 
https://i1.sndcdn.com/artworks-000077991135-u5nvu1-t500x500.jpg 
+0

Обратите внимание, что вы сохраняете около 4 секунд (ballpark) с помощью API. – mlg

+0

Я хочу использовать его из плагина Wordpress и думал, что лучше не зависеть от API. Но после того, как я подумал, что вы правы, я должен использовать https://developers.soundcloud.com/docs/api/reference#artwork_url. Благодаря! – geraldo

+0

@geraldo good call :) обратите внимание, что код сайта может потенциально измениться в любое время без предварительного уведомления, но API должен пройти долгий этап устаревания, чтобы быть проблемой. Гораздо надежнее пройти через их api. – mlg