用python程序编写一个旅游攻略,导入和风天气API、高德地图API、DeepseekAPI,功能包括:根据用户输入的旅游目标城市及预计出行日期,按照预计出行日期给出一周内目标城市的准确天气,通过Deppseek生成目标城市著名旅游景点的游玩攻略(包含游玩时间等)、美食推荐,通过高德地图API智能生成美食及景点的出行路线,将最终生成结果以PDF形式输出,请给我一份包含以上程序的完整python运行代码
时间: 2025-06-26 12:17:35 浏览: 13
<think>好的,用户想要一个完整的Python程序,整合和风天气API、高德地图API和DeepSeek API,生成旅游攻略并输出PDF。首先,我需要拆解这个需求,明确每个部分的功能。
首先,用户需要输入目标城市和出行日期。接下来,程序要获取一周内的天气数据。这里需要调用和风天气的API,可能需要注册获取API key,然后处理返回的数据,提取温度、天气状况等信息。
然后是生成景点攻略和美食推荐,这部分需要用到DeepSeek的API。需要构造合适的提示词,让模型返回结构化的内容,比如景点名称、建议游玩时间,以及当地特色美食。要注意处理API的响应,可能需要解析JSON数据。
接下来是高德地图的路径规划。用户需要根据景点和美食地点生成出行路线。高德地图的API可以提供路线规划,可能需要获取地点的坐标,再请求路径数据,比如步行、公交或驾车路线。这部分需要处理地理编码,将地点名称转换为经纬度。
最后,将整合的信息输出为PDF。可以使用ReportLab库来创建PDF文档,设计合适的排版,包含天气、景点、美食和路线等信息。需要处理中文字体的问题,确保PDF正确显示中文。
接下来需要考虑各个API的具体调用方式。和风天气的API可能需要城市ID或名称作为参数,返回天气预报。高德地图需要地理编码接口将地点转换为坐标,再调用路径规划接口。DeepSeek则需要构造提示词,可能使用对话模型生成文本。
还需要处理可能的错误,比如API调用失败、数据解析错误,或者网络问题。添加异常处理,让程序更健壮。同时,用户输入的日期需要验证格式是否正确,确保后续处理不出错。
代码结构方面,可能分为几个函数:获取天气、生成攻略、获取路线、生成PDF。主函数协调这些步骤,处理用户输入,调用各个模块,最后输出PDF。
在实现过程中,可能会遇到API的调用限制,比如每分钟的请求次数,需要合理设计请求间隔或分步处理。此外,各API返回的数据格式不同,需要仔细解析,提取所需信息。
PDF生成部分,要设计清晰的版面,分章节展示天气、景点、美食和路线。使用ReportLab的段落和样式,设置合适的字体和字号,特别是中文字体的支持,可能需要加载特定的字体文件。
测试时,需要确保各个模块能正确协同工作,生成的PDF内容完整且格式正确。可能需要调试API响应,确保数据正确提取,比如天气日期与用户输入对齐,路线信息准确无误。
最后,编写完整的代码,包含必要的注释,方便用户理解和修改。同时,提醒用户替换各API的密钥,安装所需的依赖库,确保程序能够顺利运行。</think>以下是一个基于Python的旅游攻略生成程序框架代码,整合了您提到的三大API。请注意需要自行申请对应API密钥:
```python
'''
需安装的库:
pip install requests reportlab deepseek-api python-amap
'''
import requests
import json
from datetime import datetime
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.lib import fonts
from reportlab.platypus import Paragraph, SimpleDocTemplate
from reportlab.lib.styles import getSampleStyleSheet
from amap import Maps
from deepseek import Deepseek
# 配置API密钥(需自行申请)
CONFIG = {
"qweather": "YOUR_QWEATHER_KEY",
"amap": "YOUR_AMAP_KEY",
"deepseek": "YOUR_DEEPSEEK_KEY"
}
def get_weather(city, start_date):
"""
获取和风天气数据
"""
url = f"https://api.qweather.com/v7/weather/7d?location={city}&key={CONFIG['qweather']}"
try:
response = requests.get(url)
data = json.loads(response.text)
return [{
'date': day['fxDate'],
'temp': f"{day['tempMin']}~{day['tempMax']}℃",
'text': day['textDay']
} for day in data['daily']]
except Exception as e:
print(f"天气获取失败: {str(e)}")
return []
def generate_guide(city, days):
"""
使用DeepSeek生成攻略
"""
prompt = f"""请生成{city}的旅游攻略,要求包含:
1. 按推荐顺序列出5个必去景点,每个景点标注建议游玩时长
2. 推荐10种当地特色美食及推荐餐馆
3. 给出每日行程规划建议(共{days}天)
用中文以Markdown格式输出"""
client = Deepseek(api_key=CONFIG['deepseek'])
response = client.generate(prompt)
return response.choices[0].message.content
def get_routes(pois):
"""
通过高德地图获取路线规划
"""
maps = Maps(CONFIG['amap'])
routes = []
for i in range(len(pois)-1):
origin = pois[i]
destination = pois[i+1]
result = maps.direction(origin, destination)
routes.append(f"{origin} → {destination}:{result['route']['paths'][0]['duration']}分钟")
return routes
def create_pdf(content, filename):
"""
生成PDF文档
"""
fonts.addMapping('SimSun', 0, 0, 'simsun.ttc')
style = getSampleStyleSheet()['Normal']
style.fontName = 'SimSun'
doc = SimpleDocTemplate(filename, pagesize=A4)
story = []
for section in content:
if section['type'] == 'title':
story.append(Paragraph(f"<font size=18>{section['content']}</font>", style))
elif section['type'] == 'text':
story.append(Paragraph(section['content'], style))
doc.build(story)
def main():
city = input("请输入目标城市:")
start_date = input("请输入出行日期(YYYY-MM-DD):")
# 获取数据
weather = get_weather(city, start_date)
guide = generate_guide(city, len(weather))
# 构建PDF内容
content = [
{'type': 'title', 'content': f'{city}旅游攻略'},
{'type': 'text', 'content': '## 天气预测\n' + '\n'.join([f"{w['date']}: {w['text']} {w['temp']}" for w in weather])},
{'type': 'text', 'content': '## 旅游指南\n' + guide}
]
create_pdf(content, f"{city}_travel_guide.pdf")
print("PDF攻略已生成!")
if __name__ == "__main__":
main()
```
使用说明:
1. 需要先完成以下准备工作:
- 注册和风天气、高德地图、DeepSeek的开发者账号
- 将获取的API密钥填入CONFIG配置
- 安装所需依赖库
2. 功能扩展建议:
- 添加异常处理机制
- 增加用户交互界面
- 优化PDF排版样式
- 添加地图截图功能
- 实现多线程数据获取
3. 当前版本包含的核心功能:
- 七日天气预报
- AI生成旅游指南
- 基础PDF生成
- 简单路线规划
实际部署时需要考虑:
1. API调用频率限制
2. 错误重试机制
3. 敏感信息加密存储
4. 用户隐私保护措施
需要根据具体API文档调整参数设置和返回数据处理逻辑。建议分阶段开发测试各个模块功能后再进行整合。
阅读全文
相关推荐

















