当前位置: 首页 > 知识库问答 >
问题:

如何使用PHP Bitly v4缩短URL?

帅雅逸
2023-03-14

我有Bitly v3的这段代码,它运行良好。

<?php
$login = 'login-code-here';
$api_key = 'api-key-here';
$long_url = 'https://stackoverflow.com/questions/ask';

$ch = curl_init('http://api.bitly.com/v3/shorten?login='.$login.'&apiKey='.$api_key.'&longUrl='.$long_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$res = json_decode($result, true);
echo $res['data']['url']; // bit.ly/2PcG3Fg
?>

然而,如何在新版本中做到这一点?上面的示例使用API键,但为了支持OAuth请求,它已被弃用。

如何使用Bitly v4缩短URL?

共有2个答案

段干长恨
2023-03-14

这是一个PHP包,你可以 https://packagist.org/packages/codehaveli/bitly-php

使用软件包的步骤:

第一步:

< code>composer要求codehaveli/bitly-PHP:dev-master-prefere-source 通过composer安装软件包[如果没有安装,请从这里获取https://getcomposer.org/]

第二步:

从Bitly添加访问令牌和组GUID[Guide here:https://www.codehaveli.com/how-to-generate-bitly-oauth-html" target="_blank">access-token/]

<?php

require 'vendor/autoload.php';

use Codehaveli\Bitly;
use Codehaveli\Exceptions\BitlyErrorException;

// First setup your credentials provided by Bitly

$accessToken  = "ACCESS_TOKEN_FROM_BITLY";
$guid         = "GUID_FROM_BITLY";

Bitly::init($accessToken, $guid);

第三步:

使用访问令牌和指南初始化后,只需从资源中调用方法getUrl,就像使用URL一样,将为您提供短链接。

<?php

use Codehaveli\Bitly;
use Codehaveli\Exceptions\BitlyErrorException;

$accessToken  = "ACCESS_TOKEN_FROM_BITLY";
$guid         = "GUID_FROM_BITLY";

Bitly::init($accessToken, $guid);

$link = Bitly::link();

try {

    $shortLink = $link->getUrl("https://stackoverflow.com/"); // Generated link

} catch (BitlyErrorException $e) {

    $code    = $e->getCode();
    $message = $e->getMessage();
}

注意:此软件包正在积极开发中。

陈允晨
2023-03-14

获取通用访问令牌

转到您的Bitly,单击右上角的汉堡包菜单

请参阅 https://dev.bitly.com/v4_documentation.html 并查找“使用单个帐户的应用程序”部分。

根据https://dev.bitly.com/v4/#section/Application-using-a-single-account.,身份验证有点变化

V4改变了您对Bitly API的身份验证方式。以前,您的身份验证令牌将作为每个请求的access_token查询参数提供。相反,V4要求将令牌作为每个请求的授权头的一部分提供。

代码

关于比特利的期望,请见这位https://dev.bitly.com/v4/#operation/createFullBitlink医生。

在 v4 中,您可以使用通用令牌作为标头中的持有者,每个请求如下所示:

<?php

$long_url = 'https://stackoverflow.com/questions/ask';
$apiv4 = 'https://api-ssl.bitly.com/v4/bitlinks';
$genericAccessToken = 'your-token';

$data = array(
    'long_url' => $long_url
);
$payload = json_encode($data);

$header = array(
    'Authorization: Bearer ' . $genericAccessToken,
    'Content-Type: application/json',
    'Content-Length: ' . strlen($payload)
);

$ch = curl_init($apiv4);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch);

print_r($result);

请求

您发送的JSON如下所示:

< code > { " long _ URL ":" https:\/\/stack overflow . com \/questions \/ask " }

反应

{
   "created_at":"1970-01-01T00:00:00+0000",
   "id":"shortcode-link-id-here",
   "link":"shortcode-link-here",
   "custom_bitlinks":[

   ],
   "long_url":"https://stackoverflow.com/questions/ask",
   "archived":false,
   "tags":[

   ],
   "deeplinks":[

   ],
   "references":{
      "group":"group-link-here"
   }
}

注释中有一个请求,要求只查看短链接输出。为了做到这一点,只需像这样调整代码:

<?php
$long_url = 'https://stackoverflow.com/questions/ask';
$apiv4 = 'https://api-ssl.bitly.com/v4/bitlinks';
$genericAccessToken = 'your-token';

$data = array(
    'long_url' => $long_url
);
$payload = json_encode($data);

$header = array(
    'Authorization: Bearer ' . $genericAccessToken,
    'Content-Type: application/json',
    'Content-Length: ' . strlen($payload)
);

$ch = curl_init($apiv4);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch);
$resultToJson = json_decode($result);

if (isset($resultToJson->link)) {
    echo $resultToJson->link;
}
else {
    echo 'Not found';
}

结果(假设上述文件test.php)

php test.php

bit.ly/2ZbYD4Z
 类似资料:
  • 问题内容: 解决问题的答案(使用unshort.meAPI)是我的问题,我专注于取消youtube链接。由于unshort.me易于使用,这将返回我无法解析的验证码几乎90%的结果。 到目前为止,我仍然坚持使用: 注意:注释中的所有内容都是我在使用unshort.me服务(返回验证码链接)时尝试执行的操作。 有谁知道一种更有效的方法来完成此操作而无需使用open(因为这浪费带宽)? 问题答案: 在

  • 请注意,我说的不是部署时间,通过遵循另一个StackOverflow线程中的提示,可以减少一点部署时间。

  • 我有一个字符串: 它需要缩短,所以看起来像这样: 所以基本上,它需要使用所有重复的字符,并写下它们重复的次数,而不是打印它们。我设法做到了一半: 但这只适用于重复的字符,而不是模式。我可以通过在字符串中找到ab模式来做到这一点,但这需要对每一个可能的字符串都是可行的。有人遇到过类似的事情吗?

  • 问题内容: 我正在研究使用一种算法来缩短/加密URL的可能性,该URL的长度从150到250个字符到最大12个字符。最初,我怀疑是否有可能,但我想利用StackOverflow的出色思想:) 该算法应该是可以用经典的asp,sql,c#,vb或foxpro或其他语言编写的算法。 如果没有以数据库为中心的方法,那是否有可能? 我在这里阅读的内容是,CFB模式下的AES将执行流密码,并且输出长度将与输

  • 问题内容: 如果我有这样的通用网址(不限于Twitter或Google): 有没有一种简单的方法来检查此网址是否被缩短? 在上述情况下,我作为人类当然可以看到它已经缩短了,但是有没有一种自动而 优雅的 方法? 问题答案: 您可以向URL发出请求,查看是否被重定向,如果是,则假定它是一种缩短服务。为此,您必须阅读HTTP状态代码。 另一方面,您可以将某些URL缩短服务(t.co,bit.ly等)列入