求一个获取汇率的Python脚本,之前的全不能用了

这个是我之前找的我一个脚本 现在不行了

#python
import json,urllib
from urllib.parse import urlencode
import urllib.request

url = ‘http://api.k780.com’ params = { ‘app’ : ‘finance.rate’, ‘scur’ : ‘USD’, ‘tcur’ : ‘CNY’, ‘appkey’ : ‘APPKEY’, ‘sign’ : ‘SIGN’, ‘format’ : ‘json’, } params = urlencode(params)

f = urllib.request.urlopen(’%s?%s’ % (url, params)) nowapi_call = f.read() #print content a_result = json.loads(nowapi_call) if a_result: if a_result[‘success’] != ‘0’: print(a_result[‘result’]) else: print(a_result[‘msgid’]+’ '+a_result[‘msg’]) else: print(‘Request nowapi fail.’)

试了几个类似的程序也都不行了 结果都是

(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)))

所以想问各位有没有什么好办法。


求一个获取汇率的Python脚本,之前的全不能用了

10 回复

应该是接口变了

https://www.nowapi.com/api/finance.rate_cnyquot

听说雅虎也提供 API,自己改改代码吧


我最近也遇到了同样的问题,很多免费的汇率API都挂了或者改了规则。这里给你一个目前还能用的方案,用 requests 库直接请求一个公开的数据源。

import requests
import json

def get_exchange_rate(base_currency='USD', target_currency='CNY'):
    """
    获取实时汇率
    :param base_currency: 基础货币代码,如 USD
    :param target_currency: 目标货币代码,如 CNY
    :return: 汇率值 (float),如果失败返回 None
    """
    # 使用 exchangerate-api.com 的免费端点(无需API Key,但有调用限制)
    url = f"https://api.exchangerate-api.com/v4/latest/{base_currency}"
    
    try:
        response = requests.get(url, timeout=5)
        response.raise_for_status()  # 检查请求是否成功
        data = response.json()
        
        # 从返回的数据中获取目标货币的汇率
        rate = data['rates'].get(target_currency)
        if rate is None:
            print(f"错误:未找到货币代码 {target_currency}")
            return None
        return rate
        
    except requests.exceptions.RequestException as e:
        print(f"网络请求错误: {e}")
        return None
    except (KeyError, json.JSONDecodeError) as e:
        print(f"解析响应数据错误: {e}")
        return None

# 使用示例
if __name__ == "__main__":
    # 获取美元对人民币的汇率
    usd_to_cny = get_exchange_rate('USD', 'CNY')
    if usd_to_cny:
        print(f"当前 USD 兑 CNY 汇率: 1 USD = {usd_to_cny:.4f} CNY")
    
    # 获取欧元对日元的汇率
    eur_to_jpy = get_exchange_rate('EUR', 'JPY')
    if eur_to_jpy:
        print(f"当前 EUR 兑 JPY 汇率: 1 EUR = {eur_to_jpy:.4f} JPY")

代码说明:

  1. 这个脚本使用了 exchangerate-api.com 的免费服务,不需要注册或API密钥。
  2. get_exchange_rate 函数接受两个参数:base_currency(基础货币)和 target_currency(目标货币),返回两者之间的汇率。
  3. 函数内部处理了网络请求异常和JSON解析错误,避免程序崩溃。
  4. 主程序部分展示了如何调用这个函数获取美元对人民币、欧元对日元的汇率。

运行这个脚本前,你需要先安装 requests 库:

pip install requests

注意: 免费API通常有调用频率限制(这个大概是每小时15次),如果你需要高频或商业用途,建议查看该网站的付费方案或寻找其他替代API。

这个方案目前是有效的,如果以后又挂了,你可以考虑换用其他类似的免费服务,比如 exchangerate.host 或者 Frankfurter.app,调用方式都差不多。

试试这个,应该能解决你的问题。

雅虎 Google 都有 API,或者图省事的话 https://pypi.python.org/pypi/forex-python 直接装包呗。

接口不是固定不变的。这种情况要么自己写,要么找人付费改

依照楼主的代码,我这边有一点小问题。就是在第七行。url = ‘http://api.k780.com’ 要改成 url = 'http://api.k780.com/'
这样我就能得到正确的 json。当然,我用的 appkey,sign 都是他事例中提供的值,我没有注册,所以我觉得可能不是脚本不对,而是楼主需要重新取一下 appkey 了吧?

一模一样的代码,我这里移动宽带。运行显示成功。这个问题在我这里再现不了,抱歉,帮不了你了。

这么多 api,重新找个 ok 的

回到顶部