Python|使用 tinyurl API 的 URL 缩短器
有多种 API(例如 bitly API 等)可用于 URL 缩短服务,但在本文中,我们将使用 Tinyurl API 来缩短 URL。
虽然tinyURL还没有正式发布它的 API,但我们将非正式地使用它。在这里,我们可以一次输入任意数量的 URL,并一次获取缩短的 URL。
例如,如果在命令行中我们写
$ python filename URL1 URL2 URL3
那么输出将是:
['shortened url1', 'shortened url2', 'shortened url3']
第1步:
- 首先我们要导入 7 个库。
- 我们本可以只使用一个库来工作,但为了制作好的 url 缩短器,我们必须使用 7 个库。
代码片段如下:
from __future__ import with_statement
import contextlib
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
import sys
第2步:
这里完成了 url 的编码并将其附加到 API,然后我们使用 urlopen 打开 request_url。然后我们将响应转换为 UTF-8,因为urlopen()
返回的是字节流而不是字符串。
代码片段如下:
def make_tiny(url):
request_url = ('http://tinyurl.com/api-create.php?' + urlencode({'url':url}))
with contextlib.closing(urlopen(request_url)) as response:
return response.read().decode('utf-8 ')
第 3 步:
在最后一步中,我们调用main()
并使用sys.argv
获取用户输入
我们并没有将自己限制为只有一个 url 作为输入,相反,我们是说给我们尽可能多的 url,我们会让它们变得很小。 map()
是一种循环列表并将其逐个传递给函数的简单方法。
代码片段如下:
def main():
for tinyurl in map(make_tiny, sys.argv[1:]):
print(tinyurl)
if __name__ == '__main__':
main()
最后,完整的代码如下:
#!/usr/bin/env python 3
from __future__ import with_statement
import contextlib
try:
from urllib.parse import urlencode
except ImportError:
from urllib import urlencode
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
import sys
def make_tiny(url):
request_url = ('http://tinyurl.com/api-create.php?' + urlencode({'url':url}))
with contextlib.closing(urlopen(request_url)) as response:
return response.read().decode('utf-8 ')
def main():
for tinyurl in map(make_tiny, sys.argv[1:]):
print(tinyurl)
if __name__ == '__main__':
main()
输出: