Loading

电脑 直接下载cyida deb

#! /usr/bin/env python
# -*- coding: utf-8 -*-

'''
说明:该模块自动下载cydia下的所有deb包
'''

import os
import sys
import ssl
import bz2
import gzip
import lzma

ssl._create_default_https_context = ssl._create_unverified_context

if sys.version_info[0] == 2:
    import urllib2 as urllib_
elif sys.version_info[0] == 3:
    import urllib.request as urllib_


def RequestWithDefProxy(url):
    try:
        headers = {
            'X-Machine': 'iPhone6,1',
            'X-Unique-ID': 'b596768cbbb2b54486c911832f2739b5d061c59f',
            'X-Firmware': '10.0',
            'User-Agent': 'Telesphoreo APT-HTTP/1.0.592',
            "Content-Length": 0
        }
        req = urllib_.Request(url, headers=headers)
        res = urllib_.urlopen(req)
        return res.read()
    except Exception as e:
        print(e)
        return None

def down_cydia(baseurl, basedir='.'):
    packages = list()
    if not baseurl.startswith('http'):
        baseurl = 'http://' + baseurl
    if baseurl.endswith('/'):
        baseurl = baseurl[:len(baseurl-1)]
    packages_data = None
    if packages_data is None:
        packages_data = RequestWithDefProxy(baseurl + '/./Packages.bz2')
        print('try bz2')
        if packages_data is not None:
            packages_data = bz2.BZ2Decompressor().decompress(packages_data)
    if packages_data is None:
        packages_data = RequestWithDefProxy(baseurl + '/./Packages.xz')
        print('try xz')
        if packages_data is not None:
            packages_data = lzma.decompress(packages_data)
    if packages_data is None:
        packages_data = RequestWithDefProxy(baseurl + '/./Packages.gz')
        print('try gz')
        if packages_data is not None:
            packages_data = gzip.decompress(packages_data)
    if packages_data is None:
        print('try origin')
        packages_data = RequestWithDefProxy(baseurl + '/./Packages')
    if packages_data is None:
        return
    packages_data = packages_data.decode('utf-8')
    for package_data in packages_data.split('\n\n'):
        package = dict()
        for package_item in package_data.split('\n'):
            i = package_item.find(':')
            if i < 0:
                continue
            k = package_item[:i].strip()
            v = package_item[i+1:].strip()
            package[k] = v
        if len(package) > 0:
            packages.append(package)
    i = 0
    for package in packages:
        if 'Name' not in package:
            package['Name'] = package['Package']
        filename = package['Name'] + '_' + package['Version'] + '.deb'
        package['__filename__'] = filename
        if package['Filename'].startswith('/'):
            fileurl = baseurl + package['Filename']
        else:
            fileurl = baseurl + '/' + package['Filename']
        package['__fileurl__'] = fileurl
        print('%d: %s' % (i, filename))
        i += 1
    print('all: all debs')
    sel = input('select index:')
    down_packages = list()
    if sel == 'all':
        down_packages = packages
    else:
        down_packages.append(packages[int(sel)])
    for package in down_packages:
        filename = package['__filename__']
        fileurl = package['__fileurl__']
        print('Downloading ' + fileurl)
        filedata = RequestWithDefProxy(fileurl)
        if filedata is None:
            print('Download file failed ' + fileurl)
            continue
        filepath = basedir + '/' + filename
        print('Download file success ' + filepath)
        with open(filepath, 'wb') as f:
            f.write(filedata)


if __name__ == '__main__':
    if len(sys.argv) < 2:
        print('Usage: python down_cydia.py cydia源')
        #exit(0)
    url = "http://apt.touchsprite.com" #sys.argv[1]
    down_cydia(url)
    # python down_cydia.py http://apt.touchsprite.com packages
thanks:https://github.com/lich4/codesegment/blob/master/down_cydia.py

 

posted @ 2021-08-30 19:57  loz2015  阅读(103)  评论(0编辑  收藏  举报