找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3131|回复: 8

【金】自己做的航图批量下载小程序分享一下

[复制链接]
 楼主| 发表于 2022-7-22 00:38:13 | 显示全部楼层 |阅读模式
本帖最后由 1531916156 于 2022-7-22 16:53 编辑

首先说明这个程序是在本论坛的航行资料区的链接下载航图,如果论坛不允许用脚本下载的行为,还请管理员删一下贴


————————————————————分割线——————————————————————



这是我想下载航图时,又懒得1个1个点去下载,才有的灵感做的这么一个程序。
凭借我对python一知半解,还勉强能跑...(至于代码可读性简洁性嘛...
为了解放大家的双手/doge
我也发到论坛上给大家试用一下
成果: QQ截图20220722003922.png

下载(因为文件不大,所以大家忍一下百度网盘,主要是论坛传不上来文件):
链接:https://pan.baidu.com/s/16UydO_3f2MhQC9MSFcraXQ?pwd=1nul
提取码:1nul

————————————————————分割线——————————————————————
注意:
  • 有两个版本,一个是“常用版”,一个是“全部版”。区别如下:常用版只下载尾号为1、2、7、9、10、20的航图,内容分别为机场图、机位图、离场图、进场图、进近图(我平时基本只用到这些就够了,也有可能是我太胡了瞎飞);全部版则下载此机场所有航图,但速度会慢一点。
  • 如果遇到被杀软拦截可以把程序加到排除名单(白名单)里,本人承诺此程序绝对没有任何上传用户信息或破坏用户电脑的代码(源码会放在下面)。
  • 为了防止对服务器访问太频繁我专门设置了每次下载后等待0.1s,所以下载速度不会太快,还请大家不要着急,下载完了之后会有提示。
  • 在程序同一级目录里会生成以机场ICAO代码命名的文件夹,航图就在里面。
————————————————————源码———————————————————————


常用版
  1. # coding: UTF-8

  2. import os
  3. import urllib.request as req

  4. import time


  5. def save_file(file, filename):
  6.     dirt = filename[0:4]
  7.     try:
  8.         os.mkdir(f'{dirt}')
  9.     except FileExistsError:
  10.         pass
  11.     f = open(f'{dirt}\\{filename}.pdf', 'wb')
  12.     f.write(file)
  13.     f.close()


  14. def download_file(filename):
  15.     dirt = filename[0:4]
  16.     request = req.urlopen(f'https://aip.sinofsx.com/pdf/2022%20Nr.07/AD/{dirt}/{filename}.pdf')
  17.     get = request.read()
  18.     return get


  19. if __name__ == '__main__':
  20.     air = input('请输入机场ICAO码(不要输错,否则程序会退出):').upper()
  21.     alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']
  22.     num = [1, 2, 7, 9, 10, 20]
  23.     print('\n正在下载航图,大约需要20秒钟...')
  24.     for i in num:
  25.         if i == 1:
  26.             try:
  27.                 answer = download_file(f'{air}-1A')
  28.                 save_file(answer, f'{air}-1A')
  29.             except:
  30.                 answer = download_file(f'{air}-1')
  31.                 save_file(answer, f'{air}-1')
  32.             time.sleep(0.1)
  33.         elif i == 2:
  34.             try:
  35.                 answer = download_file(f'{air}-2A')
  36.                 save_file(answer, f'{air}-2A')
  37.             except:
  38.                 answer = download_file(f'{air}-2')
  39.                 save_file(answer, f'{air}-2')
  40.             time.sleep(0.1)
  41.         else:
  42.             for j in alphabet:
  43.                 inum = str(i)
  44.                 try:
  45.                     answer = download_file(f'{air}-{i}{j}')
  46.                     save_file(answer, f'{air}-{i}{j}')
  47.                 except:
  48.                     time.sleep(0.1)
  49.                     continue
  50.                 time.sleep(0.1)
  51.     input('\n\n下载已完成,按回车退出')
复制代码

全部版
  1. # coding: UTF-8

  2. import time
  3. import os
  4. import urllib
  5. import urllib.request as req


  6. def save_file(file, filename):
  7.     dirt = filename[0:4]
  8.     try:
  9.         os.mkdir(f'{dirt}')
  10.     except FileExistsError:
  11.         pass
  12.     f = open(f'{dirt}\\{filename}.pdf', 'wb')
  13.     f.write(file)
  14.     f.close()


  15. def download_file(filename):
  16.     dirt = filename[0:4]
  17.     request = req.urlopen(f'https://aip.sinofsx.com/pdf/2022%20Nr.07/AD/{dirt}/{filename}.pdf')
  18.     get = request.read()
  19.     return get


  20. if __name__ == '__main__':
  21.     air = input('请输入机场ICAO码(不要输错,否则程序会退出):').upper()
  22.     alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']
  23.     num = [1, 2, 4, 5, 6, 7, 9, 10, 20]
  24.     print('\n正在下载航图,大约需要30~50秒...')
  25.     answer = download_file(f'{air}')
  26.     save_file(answer, f'{air}')
  27.     for i in num:
  28.         for j in alphabet:
  29.             inum = str(i)
  30.             try:
  31.                 answer = download_file(f'{air}-{i}{j}')
  32.                 save_file(answer, f'{air}-{i}{j}')
  33.             except:
  34.                 time.sleep(0.1)
  35.                 continue
  36.             time.sleep(0.1)
  37.     input('\n\n下载已完成,按回车退出')
复制代码



欢迎大佬们批评指正,我正在努力进一步学习python !



发表于 2022-7-22 00:48:30 | 显示全部楼层

回帖奖励 +3 金币

关于论坛其他人都开始编程而我连sketchup都不会的这件事
回复

使用道具 举报

 楼主| 发表于 2022-7-22 00:52:44 | 显示全部楼层
CESMD11F 发表于 2022-7-22 00:48
关于论坛其他人都开始编程而我连sketchup都不会的这件事

个人兴趣爱好而已
回复

使用道具 举报

发表于 2022-7-22 09:13:43 | 显示全部楼层

回帖奖励 +3 金币

写的不错,但是你这代码循环遍历的空文件较多,可以改进一下



(这就去改代码)
回复

使用道具 举报

 楼主| 发表于 2022-7-22 11:06:12 | 显示全部楼层
Lucas.F 发表于 2022-7-22 09:13
写的不错,但是你这代码循环遍历的空文件较多,可以改进一下

昨晚上急匆匆赶出来的所以没怎么测试原来也考虑在字母循环那里用break而不是continue,然后发现他这个航图的编号有的不是连续的,这样就导致下载不全
回复

使用道具 举报

发表于 2022-7-22 16:31:01 | 显示全部楼层
452505949 发表于 2022-7-22 11:06
昨晚上急匆匆赶出来的所以没怎么测试原来也考虑在字母循环那里用break而不是continue,然后发现 ...

建议需要改进的话要抓紧时间了,今天晚上活动完就更新新版本
回复

使用道具 举报

 楼主| 发表于 2022-7-22 22:42:47 | 显示全部楼层
Lucas.F 发表于 2022-7-22 16:31
建议需要改进的话要抓紧时间了,今天晚上活动完就更新新版本

好像已经晚了,算了,本来就是自己弄着试试手的,还给论坛添麻烦了,实在抱歉
回复

使用道具 举报

发表于 2022-7-23 10:14:25 | 显示全部楼层
452505949 发表于 2022-7-22 22:42
好像已经晚了,算了,本来就是自己弄着试试手的,还给论坛添麻烦了,实在抱歉 ...

因为很多人反映说看不到周期数不知道资料的有效性,本来计划是在7月22日活动结束后更新。

旧版本的如果还需要下载的话,给你保留了,请移步“2022 Nr.07B”
回复

使用道具 举报

 楼主| 发表于 2022-7-23 10:59:51 | 显示全部楼层
Lucas.F 发表于 2022-7-23 10:14
因为很多人反映说看不到周期数不知道资料的有效性,本来计划是在7月22日活动结束后更新。

旧版本的如果 ...

好的,非常感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表