2016-03-01 45 views
0

我試圖建立一個表單,允許用戶提交一首歌曲進行宣傳。基礎是用戶選擇一到三個平臺; soundcloud,youtube或spotify。當他們選擇他們想要展示的平臺時,他們必須在這些平臺上進行關注/訂閱。Souncloud API提交表格

到目前爲止,我已經設法構建了窗體,只有選中了相應的複選框才顯示「Connect [平臺]」按鈕,但是我很難調用Soundcloud的API。

我正在使用JavaScript SDK,並在通過瀏覽器激活的html文件中包含預構建命令。在HTML看起來像這樣:

<!doctype html> 
    <html> 
     <head> 
      <title>Connect Soundcloud</title> 
    <script src="https://connect.soundcloud.com/sdk.js"></script> 
    <button id="scbutton" onclick="scconnectgo()">Connect Soundcloud</button> 
    <script src="https://connect.soundcloud.com/sdk/sdk-3.0.0.js"></script> 
    <script> 
    function scconnectgo(){ 
    document.getElementById("scbutton").value="soundcloud connected"; 
    SC.initialize({ 
    client_id: 'example_client_id', 
     redirect_uri: 'http://djr.kissr.com/callback.html' 
     }); 
// initiate auth popup 
    SC.connect().then(function() { 
    return SC.get('/me'); 
    }).then(function(me) { 
    alert('Hello, ' + me.username); 
    }); 
    } 
    </script> 
    </script> 
    </head> 
<body> 
<div id="target"></div> 
</body> 
</html> 

當我這個文件加載到我的瀏覽器,該按鈕顯示爲「連接的SoundCloud」,這是我想要的。當按鈕被點擊時腳本運行,soundcloud連接彈出窗口顯示。到目前爲止,所有的都很好,但是當我在放入細節後點擊連接時,彈出窗口不會消失。我所託管的callback.html文件似乎不起作用,我只是將其複製並粘貼到文本文件中,然後將其上載到我的KISSr保管箱文件夾中。該頁面會加載,它會顯示「此彈出窗口將關閉...」,但它不會。

下面是callback.html代碼:

<!DOCTYPE html> 
    <html lang="en"> 
     <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
      <title>Connect with SoundCloud</title> 
     </head> 
     <body onload="window.setTimeout(window.opener.SC.connectCallback, 1)"> 
      <b style="text-align: center;">This popup should automatically close in a few seconds</b> 
     </body> 
</html> 

窗口只是保持打開狀態,我不知道如果腳本已經成功。

有什麼建議嗎?我以前見過這個問題,但遺憾的是他們都沒有回答我的問題。我真的很感謝一些幫助。

編輯:我剛剛在Chrome中使用'檢查'功能,並發現協議不匹配。錯誤是:「Uncaught SecurityError:阻止了一個源地址爲」http://djr.kissr.com「的幀訪問源爲」null「的幀。請求訪問的幀的協議爲」http「,被訪問的幀的協議爲」file「。協議必須匹配。「我不知道這是否有幫助。

在此先感謝。

+0

返回的URL你是從本地Web服務器或關閉您的文件系統上運行您的網頁?哪個頁面出現錯誤? –

+0

此刻是的,但彈出的SC授權確實出現,我輸入了我的詳細信息,我收到「此彈出窗口很快關閉...」頁面,但它不關閉 – maxthackray

回答

0

這是我在爲我工作的項目上工作的。

我的callback.html頁面的內容。

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <title>Connect with SoundCloud</title> 
    </head> 
    <body> 
    <b style="text-align: center;">This popup...</b> 
    <script type="text/javascript"> 
     var sURL = window.document.URL.toString(); 
     window.opener.scUser.parseToken(sURL); 
     window.close(); 
    </script> 
    </body> 
</html> 

scUser是與解析 的URL,剔除並利用該令牌(如果存在的話)的製造方法「parseToken」 javascript對象。

+0

嗨。感謝您的答覆。可悲的是,這也沒有奏效。如果我使用我註冊該應用的帳戶登錄,它會有所作爲嗎?如果這有所作爲,我還有其他幾個帳戶可以嘗試? – maxthackray

+0

我遇到了同樣的問題,忘記了我是如何解決它的。 據我記得,我永遠不能使用body「onload」來工作,所以我把代碼放在內聯中,如我的示例中所示。 – SteveE

+0

我設法解決它。問題是原始的html文件位於我的驅動器上,而不是在線。我在網上託管文件,它的工作原理。我現在遇到了sc。[function]命令的問題,但這完全是另一回事。另外,爲了補充,我確實嘗試了你上面寫的代碼,但它也不喜歡這樣 – maxthackray

0

這是我工作的登錄流程:

我讓使用Ajax的PHP函數的遠程調用來檢索 URL我將用它來創建自己的登錄窗口

public function getAuthConnect() { 
    $result = "https://soundcloud.com/connect?" 
    . "client_id=" . $this->getClientId(false) 
    . "&redirect_uri=" . urlencode($this->getCallback()) 
    . "&response_type=code" 
    . "&consumer_key=" . $this->getClientSecret(); 
    return $result; 
} 

這個函數返回了我這樣一個網址:

https://soundcloud.com/connect?client_id=MY_CLIENT_ID&redirect_uri=MY_CALLBACK_URL&response_type=code&consumer_key=MY_CLIENT_SECRET_CODE

的MY_CALLBACK _URL必須與您在soundcloud爲您的應用程序輸入的身份驗證的重定向URI匹配。

我然後創建和打開我自己的登錄彈出窗口 其中「數據」是上述

var myWindow = window.open(
    data, "myWindow", "width=" + w + ", height=" 
    + h + ", top=" + top + ", left=" + left);