0

したがって、次のフォームから値を cURL URL (スクリプト名は pagination.php) に投稿しようとしています。

<form action="pagination.php" method="post">
<input style="width:50%" type="text" name="search_term">
<input type="submit" value="Submit">
</form>

$search_term = $_POST['search_term'];

echo $search_term;

$post_data = array('q' => $search_term);

$ch = curl_init();

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_URL, 'http://gdata.youtube.com/feeds
/api/videos?q='.urlencode($search_term).'&safeSearch=none&orderby=viewCount&
v=2&alt=json&start-index=1&max-results=50');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
curl_close($ch);

$data = json_decode($output,true);

$info = $data["feed"];
$video = $info["entry"];
$nVideo = count($video);



echo "<ul style='float:right'>";
foreach($video as $video) {
echo '<img src="'.$video['media$group']['media$thumbnail'][0]['url'].'"><br><br>';
$title = $video['title']['$t'];
$video_id = $video['media$group']['yt$videoid']['$t'];
echo '<a href="search_4.php?video_get_id='.$video_id.'">'.$title.'</a>';
echo '<br>'; 
}

このようなコードを実行しても何も起こりません (そして、空でないことを確認するために $search_term をエコーアウトしました)。ただし、このように手動で $search_term に値を割り当てると、

$search term = 'baseball';

すべて正常に動作します。投稿されたデータを許可しないcURLについて何かありますか? ありがとう!

4

2 に答える 2

3

行方不明のようです

curl_setopt($ch, CURLOPT_POST, 1 ); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 

編集 今、「これを機能させるにはどうすればよいですか?」という未質問の質問に答えます。

@Kostanosが言ったように、問題はURLの改行だったようです。これは機能します:

<form action="pagination.php" method="post">
<input style="width:50%" type="text" name="search_term">
<input type="submit" value="Submit">
</form>
<?php
if($_POST)
  {
    $search_term = $_POST['search_term'];

    echo $search_term;

    $post_data = array('q' => $search_term);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://gdata.youtube.com/feeds/api/videos?q='.urlencode($search_term).'&safeSearch=none&orderby=viewCount&v=2&alt=json&start-index=1&max-results=50');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $output = curl_exec($ch);
    curl_close($ch);

    $data = json_decode($output,true);

    $info = $data["feed"];
    $video = $info["entry"];
    $nVideo = count($video);



    echo "<ul style='float:right'>";
    foreach($video as $video)
    {
      echo '<img src="'.$video['media$group']['media$thumbnail'][0]['url'].'"><br><br>';
      $title = $video['title']['$t'];
      $video_id = $video['media$group']['yt$videoid']['$t'];
      echo '<a href="search_4.php?video_get_id='.$video_id.'">'.$title.'</a>';
      echo '<br>';
    }

  }
于 2013-05-28T01:53:11.687 に答える
1

あなたのコードによると:

...
$search_term = $_POST['search_term'];
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $search_term);
...

$search_form は正しい POSTFIELDS 値ではありません。key=>valueペアの配列または次のような文字列である必要があります。&key=value&key1=value1..

これを使用してみてください:

...
$search_term = $_POST['search_term'];
$post_data = array('q' => $search_term);
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
...

ところで:YouTube APIの場合

POST リクエストは必要ありません。GET リクエストだけです。コードから次の 2 行を削除します。

curl_setopt($ch, CURLOPT_POST, 1 ); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $search_term);

そして、この行を置き換えます (文字列に何も入力せずに、1 行であることを確認してください。エディターが長い文字列に入力を追加しているようです!):

curl_setopt($ch, CURLOPT_URL, 'http://gdata.youtube.com/feeds/api/videos?q=' . urlencode($search_term) . '&safeSearch=none&orderby=viewCount&v=2&alt=json&start-index=1&max-results=50');

PS。$search_term に urlencode を追加することにより

于 2013-05-28T02:29:22.070 に答える