2014-09-29 26 views
0

我有一个包含soundcloud曲目URL列表的文本文件。我也有一个php文件,可以随机选择这些URL中的一个,并允许我在不同的php文件中接收它。现在由于某种原因,我将$ url设置为随机选择的URL并在下一行中调用它。我得到的仅仅是URL的文本版本,而不是iframe soundcloud嵌入代码。SoundCloud动态URL问题

<?php 

    //Get the SoundCloud URL 
    $url = $_GET['type'] = 0; include 'http://example.com/randomselector.php'; 

    //Get the JSON data of song details with embed code from SoundCloud oEmbed 
    $getValues=file_get_contents(
     'http://soundcloud.com/oembed?format=js&url='.$url.'&iframe=true');    

    //Clean the Json to decode 
    $decodeiFrame=substr($getValues, 1, -2); 

    //json decode to convert it as an array 
    $jsonObj = json_decode($decodeiFrame); 

    //Change the height of the embed player if you want else uncomment below line 
    echo $jsonObj->html; 
?> 

我试图在第二行手动插入一个URL,并且工作正常。这意味着我得到了iframe嵌入代码。

这是randomselector.php

<?php 

/* File, where the random text/quotes are stored one per line */ 
$settings['text_from_file'] = 'http://example.com/list.txt'; 

/* 
    How to display the text? 
    0 = raw mode: print the text as it is, when using RanTex as an include 
    1 = Javascript mode: when using Javascript to display the quote 
*/ 
$settings['display_type'] = 0; 

/* Allow on-the-fly settings override? 0 = NO, 1 = YES */ 
$settings['allow_otf'] = 1; 

/******************************************************************************* 
*******************************************************************************/ 

/* Override type? */ 
if ($settings['allow_otf'] && isset($_GET['type'])) 
{ 
    $type = intval($_GET['type']); 
} 
else 
{ 
    $type = $settings['display_type']; 
} 

/* Get a list of all text options */ 
if ($settings['text_from_file']) 
{ 
    $settings['quotes'] = file($settings['text_from_file']); 
} 

/* If we have any text choose a random one, otherwise show 'No text to choose from' */ 
if (count($settings['quotes'])) 
{ 
    $txt = $settings['quotes'][array_rand($settings['quotes'])]; 
} 
else 
{ 
    $txr = 'No text to choose from'; 
} 

/* Output the image according to the selected type */ 
if ($type) 
{ 
    /* New lines will break Javascript, remove any and replace them with <br /> */ 
    $txt = nl2br(trim($txt)); 
    $txt = str_replace(array("\n","\r"),'',$txt); 
    echo 'document.write(\''.addslashes($txt).'\')'; 
} 
else 
{ 
    echo $txt; 
} 
?> 

这是LIST.TXT

Link1 
Link2 
Link3 
+0

为了帮助你,请分享randomselector.php /列表文件。你是完全正确的,我已经在file_get_contents - $ url = link之前添加了一行。它将按预期工作。 http://lab.sourcloud.com/stackoverflow/26092137/ – devbnz 2014-09-29 10:58:00

+0

我添加了randomselector.php和列表到我原来的问题。 – pyalb 2014-09-29 16:56:48

回答

0

尝试卷曲insted的的file_get_contents的。

https://developers.soundcloud.com/docs/api/reference#oembed

见变化:

<?php 

    //Get the SoundCloud URL 
    $url = $_GET['type'] = 0; 
    include 'randomselector.php'; 

    $url = getUrl(); 

    $curlurl = 'http://soundcloud.com/oembed?format=json&url='.$url; 

    //curl 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL,$curlurl); 
    $result=curl_exec($ch); 
    curl_close($ch); 

    //sometimes you will get an error 
// $result = file_get_contents($curlurl); 

    $result = json_decode($result, true); 
    echo $result['html']; 
?> 

randomselector.php

<?php 
function getUrl(){ 
/* File, where the random text/quotes are stored one per line */ 
$settings['text_from_file'] = 'list.txt'; 

/* 
    How to display the text? 
    0 = raw mode: print the text as it is, when using RanTex as an include 
    1 = Javascript mode: when using Javascript to display the quote 
*/ 
$settings['display_type'] = 0; 

/* Allow on-the-fly settings override? 0 = NO, 1 = YES */ 
$settings['allow_otf'] = 1; 

/******************************************************************************* 
*******************************************************************************/ 

/* Override type? */ 
if ($settings['allow_otf'] && isset($_GET['type'])) 
{ 
    $type = intval($_GET['type']); 
} 
else 
{ 
    $type = $settings['display_type']; 
} 

/* Get a list of all text options */ 
if ($settings['text_from_file']) 
{ 
    $settings['quotes'] = file($settings['text_from_file']); 
} 

/* If we have any text choose a random one, otherwise show 'No text to choose from' */ 
if (count($settings['quotes'])) 
{ 
    $txt = $settings['quotes'][array_rand($settings['quotes'])]; 
} 
else 
{ 
    $txr = 'No text to choose from'; 
} 

/* Output the image according to the selected type */ 
if ($type) 
{ 
    /* New lines will break Javascript, remove any and replace them with <br /> */ 
    $txt = nl2br(trim($txt)); 
    $txt = str_replace(array("\n","\r"),'',$txt); 
// echo 'document.write(\''.addslashes($txt).'\')'; 
} 
else 
{ 
// echo $txt; 
} 
return $txt; 
} 
?> 
+0

这可行,但我如何将auto_play和show_comments添加到此iframe?我做了这样的事情: '$ curlurl ='http://soundcloud.com/oembed?format = json&url ='。$ url。'&auto_play = true&show_comments = false'' 但是对于某些原因,它只影响其中一个网址从list.txt – pyalb 2014-09-30 23:53:22

+0

不知道你的意思是只影响其中一个网址。 http://soundcloud.com/oembed?format=json&auto_play=true&show_comments=false&url=对我来说工作正常。在这里检查。 http://lab.sourcloud.com/stackoverflow/26092137/ – devbnz 2014-10-01 13:19:56