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();  

?>

如何将长网址数组转换为 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

这是生成链接的函数,请务必将登录名和 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 回答
1

这是一个与 bit.ly API 集成的免费 PHP 客户端库: https ://www.mashape.com/mashaper/bitly

只需将 getShortenedUrl 挂钩到您的 foreach 循环中,您就应该是金色的。


完全披露,我是 Mashape 的工匠倡导者,也是我大学时的 PHP 黑客。如果您有任何进一步的问题,请随时与我联系。

于 2012-09-18T22:14:45.750 回答
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 回答
0

你也可以使用线程,或者一些工人......

https://github.com/krakjoe/pthreads

享受 ...

于 2012-09-19T15:57:27.660 回答