2

bit.ly apiを使用して、一度に複数のURLを短縮しようとしていますが、成功していません。

    <?php

 $sites = array( 
'http://api.bit.ly/shorten?version=2.0.1&login=bitlyexample&apiKey=R_8b726077f3d5c6029700c29e529395d3&format=text&longUrl=http://myurl.com', 
'http://api.bit.ly/shorten?version=2.0.1&login=bitlyexample&apiKey=R_8b726077f3d5c6029700c29e529395d3&format=text&longUrl=http://myurl3.com', 
); 

foreach ( $sites as $site ) { 
    $xmlDoc = new DOMDocument();  
    if ( @$xmlDoc->load($site) ) { 
        echo "{$site} successful<br />\n"; 
    } else { 
        echo "{$site} invalid<br />\n"; 
    } 
} 
die();  

?>

長いURLの配列をbit.lyのリストに変換するにはどうすればよいですか?

4

5 に答える 5

2

file_get_contents() を使用してみてください

$sites = array(
    'http://api.bit.ly/shorten?version=2.0.1&login=bitlyexample&apiKey=R_8b726077f3d5c6029700c29e529395d3&format=text&longUrl=http://myurl.com',
    'http://api.bit.ly/shorten?version=2.0.1&login=bitlyexample&apiKey=R_8b726077f3d5c6029700c29e529395d3&format=text&longUrl=http://myurl3.com',
);

foreach ( $sites as $site ) {
    $shortened_url = file_get_contents($site);
    if($shortened_url)
        echo "$shortened_url <br/>";
}
die();
于 2012-09-18T00:52:56.377 に答える
1

以下は、bit.ly API と統合する無料の PHP クライアント ライブラリです: https://www.mashape.com/mashaper/bitly

getShortenedUrl を foreach ループにフックするだけで、ゴールデンになるはずです。


完全な開示、私は大学時代から Mashape の Craftsman Advocate であり、仲間の PHP ハッカーです。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-09-18T22:14:45.750 に答える
1

リンクを生成する関数を次に示します。ログイン名と API キーを自分のものに置き換えてください。

function get_short_link($url) {
  $bitly_login="**login**";
  $bitly_apikey="**apikey**";

  $api_call = file_get_contents("http://api.bit.ly/shorten?version=2.0.1&longUrl=".$url."&login=".$bitly_login."&apiKey=".$bitly_apikey);

  $bitlyinfo=json_decode(utf8_encode($api_call),true);

  if ($bitlyinfo['errorCode']==0) {
    return $bitlyinfo['results'][urldecode($url)]['shortUrl'];
  } else {
    return false;
  }
}

次に、関数を実行するために foreach ループにスローします。

$bitlyarray = array();
$arraylist = array(
  'http://www.siteone.com',
  'http://www.sitetwo.com',
  'http://www.sitethree.com'
);

foreach($arraylist as $link)
{
  $bitlyarray[] = get_short_link($link);
}

var_dump($bitlyarray);

それが役立つことを願っています。

于 2012-09-18T01:00:21.383 に答える
0

スレッド、またはいくつかのワーカーを使用することもできます...

https://github.com/krakjoe/pthreads

楽しみ ...

于 2012-09-19T15:57:27.660 に答える
0

個人的には、fgc よりも高速な curl を使用します。一括変換を行いたい場合は、curl multi を実装しないのはなぜですか。これにより、API 要求の待機時間が短縮されます。速いほうがいいですよね?

function curl_multi($urls) {
    $curly = array();
    $result = array();

    $mh = curl_multi_init();
    foreach ($urls as $id=>$url) {
        $curly[$id] = curl_init();

        curl_setopt($curly[$id], CURLOPT_URL,            $url);
        curl_setopt($curly[$id], CURLOPT_HEADER,         0);
        curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curly[$id], CURLOPT_TIMEOUT,        30);
        curl_setopt($curly[$id], CURLOPT_USERAGENT,      'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0');
        curl_setopt($curly[$id], CURLOPT_REFERER,        $url);
        curl_setopt($curly[$id], CURLOPT_ENCODING,       'gzip,deflate');
        curl_setopt($curly[$id], CURLOPT_AUTOREFERER,    true);
        curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, true);

        curl_multi_add_handle($mh, $curly[$id]);
    }
    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while($running > 0);
    foreach($curly as $id => $c) {
        $result[$id] = curl_multi_getcontent($c);
        curl_multi_remove_handle($mh, $c);
    }
    curl_multi_close($mh);
    return $result;
}


$sites = array( 
'http://api.bit.ly/shorten?version=2.0.1&login=bitlyexample&apiKey=R_8b726077f3d5c6029700c29e529395d3&format=text&longUrl=http://myurl.com', 
'http://api.bit.ly/shorten?version=2.0.1&login=bitlyexample&apiKey=R_8b726077f3d5c6029700c29e529395d3&format=text&longUrl=http://myurl3.com', 
); 

$result = curl_multi($sites);

print_r($result);
/*
Array
(
    [0] => http://bit.ly/UhaW9E
    [1] => http://bit.ly/RlX21s
)
*/ 
于 2012-09-18T02:24:33.367 に答える