如何用脚本批量缩短URL?

wen 实用脚本 2

如何用脚本批量缩短URL?一篇高效链接管理指南

目录导读

  1. 为什么需要批量缩短URL?
  2. 批量缩短URL的核心原理
  3. 准备工作:API密钥与脚本环境
  4. 脚本实战:Python批量缩短URL
  5. 脚本实战:Bash+curl快速批量处理
  6. 常见问题Q&A
  7. 注意事项与最佳实践

如何用脚本批量缩短URL?

为什么需要批量缩短URL?

在社交媒体运营、邮件营销、SEO外链建设或数据分析场景中,长链接往往影响用户体验和点击率,一条包含UTM参数的推广链接可能长达200+字符,不仅占用字符限制(如Twitter的280字符),还容易在复制时出错。

手动逐个缩短几十甚至上百条链接效率极低,利用脚本可以做到:

  • 一次处理数百条链接,几分钟完成手动数小时的工作
  • 统一管理,所有短链接附带自定义别名、过期时间
  • 数据追踪,批量获取点击统计、地域分布

批量缩短URL的核心原理

脚本本质上是通过API调用第三方短链接服务(如Bitly、TinyURL、Rebrandly等)来实现,流程如下:

  1. 输入源:从CSV、TXT文件或Excel读取原始长链接列表
  2. API交互:脚本以HTTP POST方式向服务商发送请求,携带原始URL和API密钥
  3. 结果收集:解析返回的JSON,提取缩短后的URL
  4. 输出结果:保存为新文件或直接追加到原文件

关键技术点:API认证(OAuth或Access Token)、请求频率控制(防止限流)、错误重试机制。


准备工作:API密钥与脚本环境

以Bitly(知名度较高、文档完善)为例:

获取API密钥

  • 登录Bitly账号,进入设置 → API → 生成Access Token
  • 注意:免费版每月有额度限制(通常1000-5000次),批量处理前先确认剩余配额

脚本运行环境

  • Python方案:需要安装requests库(pip install requests
  • Bash方案:Linux/macOS自带curl,Windows需启用WSL或使用Git Bash

准备URL文件

建议使用纯文本格式,每行一条URL(无多余空格),保存为urls.txt

https://example.com/page1?utm_source=newsletter
https://example.com/page2?utm_source=weibo
https://example.com/page3?utm_source=wechat

脚本实战:Python批量缩短URL

以下脚本兼容Python 3.6+,包含自动休眠避免API滥用:

import requests
import time
import json
# 配置
API_TOKEN = "你的BitlyAccessToken"
INPUT_FILE = "urls.txt"
OUTPUT_FILE = "short_urls.txt"
GROUP_GUID = "你的GroupGUID"  # Bitly账户组ID(可选)
HEADERS = {
    "Authorization": f"Bearer {API_TOKEN}",
    "Content-Type": "application/json"
}
def shorten_url(long_url):
    """调用Bitly API缩短单个URL"""
    endpoint = "https://api-ssl.bitly.com/v4/shorten"
    payload = {
        "long_url": long_url,
        "group_guid": GROUP_GUID  # 可选
    }
    try:
        response = requests.post(endpoint, headers=HEADERS, json=payload)
        if response.status_code == 201:
            return response.json().get("link")
        else:
            print(f"错误: {response.status_code} - {response.text}")
            return None
    except Exception as e:
        print(f"请求异常: {e}")
        return None
def batch_shorten():
    with open(INPUT_FILE, "r") as f:
        urls = [line.strip() for line in f if line.strip()]
    results = []
    for idx, url in enumerate(urls, 1):
        print(f"正在处理第 {idx}/{len(urls)} 条: {url[:50]}...")
        short_url = shorten_url(url)
        if short_url:
            results.append(short_url)
        else:
            results.append(f"失败: {url}")
        # 避免速率限制(Bitly限制每分钟150次请求)
        if idx % 50 == 0:
            time.sleep(10)
    # 保存结果
    with open(OUTPUT_FILE, "w") as f:
        f.write("\n".join(results))
    print(f"完成!共处理 {len(urls)} 条,成功 {sum(1 for r in results if not r.startswith('失败'))} 条")
if __name__ == "__main__":
    batch_shorten()

运行方式:将脚本保存为shorten.py,在终端执行python shorten.py,等待输出结果即可。


脚本实战:Bash+curl快速批量处理

适合不想安装Python的环境,依赖系统原生工具:

#!/bin/bash
# 配置
ACCESS_TOKEN="你的BitlyAccessToken"
INPUT_FILE="urls.txt"
OUTPUT_FILE="short_urls.txt"
# 清空输出文件
> "$OUTPUT_FILE"
# 逐行处理
while IFS= read -r url; do
    # 跳过空行
    [ -z "$url" ] && continue
    echo "正在缩短: $url"
    # 调用Bitly API(使用curl)
    response=$(curl -s -X POST \
        -H "Authorization: Bearer $ACCESS_TOKEN" \
        -H "Content-Type: application/json" \
        -d "{\"long_url\": \"$url\"}" \
        "https://api-ssl.bitly.com/v4/shorten")
    # 提取短链接(使用grep/sed)
    short_link=$(echo "$response" | grep -o '"link":"[^"]*"' | head -1 | cut -d'"' -f4)
    if [ -n "$short_link" ]; then
        echo "$short_link" >> "$OUTPUT_FILE"
        echo "成功: $short_link"
    else
        echo "失败: $url" >> "$OUTPUT_FILE"
        echo "失败: $url (检查API密钥或配额)"
    fi
    # 每10条暂停2秒
    count=$((count+1))
    if [ $((count % 10)) -eq 0 ]; then
        sleep 2
    fi
done < "$INPUT_FILE"
echo "批量缩短完成!结果保存在 $OUTPUT_FILE"

运行方式:保存为shorten.sh,执行chmod +x shorten.sh && ./shorten.sh


常见问题Q&A

Q:脚本提示“403 Forbidden”是什么原因? A:通常是API密钥无效或权限不足,检查Token是否已过期(Bitly Token永久有效但可撤销),或账户是否已被限制。

Q:免费版API有额度,用完了怎么办? A:① 更换服务商(如TinyURL免费无限制但无数据统计);② 自建短链接服务(如Polr、YOURLS);③ 错峰处理,分批次缩短。

Q:如何处理链接中含特殊字符(如中文、空格)? A:脚本发送前需使用urllib.parse.quote()(Python)或--data-urlencode(curl)进行URL编码,Bitly API会自动处理大多数情况,但建议提前对URL进行编码。

Q:脚本返回短链接但无法访问? A:① 原始链接本身无效;② Bitly的链接存在缓存延迟(通常1-2分钟);③ 账户被Bitly标记为滥用(如短时间内大量创建)。

Q:可以生成自定义别名吗? A:可以,在API请求的payload中添加"domain": "bit.ly""custom_bitlink": "你想要的别名"(需付费账户)。


注意事项与最佳实践

  1. 速率控制:免费API通常每秒1-3次请求,脚本中务必加入延迟,Bitly限制为每分钟150次,建议每10条暂停2秒。
  2. 数据备份:处理前保留原始URL副本,避免失败后重新收集。
  3. 错误日志:建议将失败URL单独保存,便于手动补处理,例如加入failed.txt
  4. 链接验证:每次缩短后,使用requests.head()快速检查短链接的状态码(200或301视为正常)。
  5. 隐私考虑:避免将敏感URL(如含密码的链接)通过第三方服务缩短。
  6. 合规使用:部分服务(如Bitly)禁止创建钓鱼、色情等违规内容,注意遵守ToS。

通过以上脚本,你可以轻松将数百条长链接压缩为简洁的短链接,提升工作效率,根据实际需求选择Python(灵活)或Bash(轻量)方案,配合合适的API服务,即可实现自动化链接管理。

抱歉,评论功能暂时关闭!