Soundcloud API, PHP и OAuth - PullRequest
       37

Soundcloud API, PHP и OAuth

3 голосов
/ 26 апреля 2010

Я создаю сайт, и мне нужно запросить последние два трека из моей учетной записи soundcloud и отобразить их на моей странице. Я прочитал документацию по Soundcloud API, но она кажется мне неясной и далекой от меня. Я установил библиотеку PHP для использования API и Oauth и настроил свое приложение SoundCloud для получения моих Consumer Keys, но я не могу запустить сеанс OAuth.

Я использую эту библиотеку .

Мне нужно получить последние 2 трека из моей учетной записи Soundcloud. После того как мне потребуются файлы из библиотеки (soundcloud.php и oauth.php), мне нужно установить четыре параметра: $ consumer_key, $ consumer_secret, $ callback_url, $ tmp_path.

У меня уже есть ключи и папка кэша для записи. Я не знаю, какой у меня URL обратного вызова. Кроме того, я должен сказать, что не могу найти ни одного рабочего примера кода, поэтому я даже не могу ничего писать. Так заблокировано!

Можно ли каким-либо образом автоматизировать процесс OAuth без вызова другого окна, поэтому мой токен OAuth запрашивается в моем сценарии PHP?.

Мне было интересно, не могли бы вы передать мне пример кода для этого. Это было бы здорово !!

1 Ответ

2 голосов
/ 08 июля 2010

Это может быть полезно для вас. После входа он вставляет мои любимые треки на страницу. Вместо этого вы можете изменить $ favs, чтобы загружать собственные песни вместо избранных.

Также обратите внимание, что мой config.php включает в себя мой customer_key, consumer_secret и мой callback_url.

$callback_url = 'http://localhost/soundcloud';

Вы хотите, чтобы оно равнялось месту, где находится ваш php-скрипт.

<?php
  require_once ('php-soundcloud/mptre-php-soundcloud-644bb0e/oauth.php');
  require_once ('php-soundcloud/mptre-php-soundcloud-644bb0e/soundcloud.php');
  require_once ('config.php');

session_start();

// Clear the session i.e delete all stored tokens.
if (isset($_GET['logout'])) {
    session_destroy();
}

// Variables used for verifying the status of the "OAuth dance".
$oauth_token = (isset($_GET['oauth_verifier']))
    ? $_GET['oauth_verifier']
    : ((isset($_SESSION['oauth_access_token'])) ? $_SESSION['oauth_access_token'] : NULL);
$oauth_request_token = (isset($_SESSION['oauth_request_token']))
    ? $_SESSION['oauth_request_token']
    : NULL;
$oauth_request_token_secret = (isset($_SESSION['oauth_request_token_secret']))
    ? $_SESSION['oauth_request_token_secret']
    : NULL;

if (isset($oauth_token) && isset($oauth_request_token) && isset($oauth_request_token_secret)) {
    // Retreive access tokens if missing.
    if (!isset($_SESSION['oauth_access_token']) && !isset($_SESSION['oauth_access_token_secret'])) {
        $soundcloud = new Soundcloud(
            $consumer_key,
            $consumer_secret,
            $_SESSION['oauth_request_token'],
            $_SESSION['oauth_request_token_secret']
        );
        $token = $soundcloud->get_access_token($oauth_token);
        $_SESSION['oauth_access_token'] = $token['oauth_token'];
        $_SESSION['oauth_access_token_secret'] = $token['oauth_token_secret'];
    }

    // Construct a fully authicated connection with SoundCloud.
    $soundcloud = new Soundcloud(
        $consumer_key,
        $consumer_secret,
        $_SESSION['oauth_access_token'],
        $_SESSION['oauth_access_token_secret']
    );

    // Get basic info about the authicated visitor.
    $me = $soundcloud->request('me');
    $me = new SimpleXMLElement($me);
    $me = get_object_vars($me);

    // Get some embedding code for favs
    $favs = $soundcloud->request('http://api.soundcloud.com/users/'.$me['id'].'/favorites/');
    $favs = new SimpleXMLElement($favs);

} else {
    // This is the first step in the "OAuth dance" where we ask the visitior to authicate himself.
    $soundcloud = new Soundcloud($consumer_key, $consumer_secret);
    $token = $soundcloud->get_request_token($callback_url);

    $_SESSION['oauth_request_token'] = $token['oauth_token'];
    $_SESSION['oauth_request_token_secret'] = $token['oauth_token_secret'];

    $login = $soundcloud->get_authorize_url($token['oauth_token']);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>SoundCloud PHP API Wrapper</title>
    <meta name="author" content="Anton Lindqvist" />
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.7.0/build/reset/reset-min.css" />
    <link rel="stylesheet" type="text/css" href="assets/css/style.css" />
</head>
<body>
    <div id="wrapper">
        <div id="content">
            <?php if (isset($me)): ?>
                <a class="logout" href="?logout=true">logout</a>
            <?php endif; ?>
            <div id="header">
                <h1>SoundCloud PHP API Wrapper</h1>
            </div>
            <?php if (isset($login)): ?>
            <h2>What is this?</h2>
            <p>This is a basic demo</p>
            <h2>How to start?</h2>
            <p><a class="button" href="<?php echo $login; ?>">login with your SoundCloud account</a></p>
            <?php elseif (isset($me)): ?>
                <div id="profile">
                  <h2>
                    <a href="<?php echo $me['permalink-url']; ?>"><?php echo $me['permalink']; ?></a>
                  </h2>
                </div>
                <div class="clear"></div>

                <div id="favs">
                <?php
                  if (isset($favs)){

                    foreach($favs->track as $fav){
                        $permalink_url = $fav->{'permalink-url'};
                        $permalink_url = urlencode($permalink_url);

                        $f = simplexml_load_file('http://soundcloud.com/oembed?url='.$permalink_url);
                        echo $f->html;
                    }

                  } else {
                     echo "fail";
                  }
                ?>
                </div>
            <?php endif; ?>
        </div>
    </div>
</body>
</html>

Также обратите внимание, что я php noob, впервые использую этот API ... так что мои способности не простираются на данный момент. Большая часть этого была «заимствована» из демонстрации, которая поставляется с используемой вами библиотекой php-оболочки.

Надеюсь, это поможет, хотя:)

пс. Не уверен, есть ли способ автоматизировать процесс OAuth без вызова другого окна.

...