📜  Python|使用 tinyurl API 的 URL 缩短器

📅  最后修改于: 2022-05-13 01:54:55.121000             🧑  作者: Mango

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

输出: