Soundcloud API, PHP и OAuth

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

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

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

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

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

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


person fedeisas    schedule 26.04.2010    source источник
comment
Можете ли вы дать дополнительную информацию? Чего вы ожидаете и что получаете взамен? Может быть, какой-то пример кода.   -  person Ikke    schedule 26.04.2010
comment
@Икке Привет! Спасибо, что так быстро ответили. Мне нужно получить последние 2 трека из моей учетной записи Soundcloud. После того, как мне нужны файлы из библиотеки (soundcloud.php и oauth.php), мне нужно установить четыре параметра: $consumer_key, $consumer_secret, $callback_url, $tmp_path. У меня уже есть ключи и доступная для записи папка кеша. Я не знаю, какой у меня URL обратного вызова. Кроме того, я должен сказать, что не могу найти ни одного примера кода, поэтому даже не могу начать что-либо писать. Так заблокировано! Любые предложения будут ценны.   -  person fedeisas    schedule 26.04.2010
comment
Добавьте это к вопросу, чтобы улучшить вопрос.   -  person Ikke    schedule 26.04.2010
comment
$callback_url — это адрес вашей веб-страницы. Например, у меня localhost/soundcloud, так как там находится мой код. В данный момент я работаю над чем-то похожим, поэтому, возможно, я смогу немного помочь лучше!   -  person colinjwebb    schedule 07.07.2010


Ответы (1)


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

Также обратите внимание, что мой config.php включает в себя мой Consumer_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, использую этот API в первый раз... так что мои способности на данный момент не выходят за рамки этого. Большая часть этого была «позаимствована» из демонстрации, которая поставляется с библиотекой-оболочкой php, которую вы используете.

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

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

person colinjwebb    schedule 08.07.2010
comment
Кроме того, я только что заметил, что для входа/выхода из системы требуется 2 попытки до успеха :( - person colinjwebb; 08.07.2010