zoukankan      html  css  js  c++  java
  • 电脑 直接下载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('
    
    '):
            package = dict()
            for package_item in package_data.split('
    '):
                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
  • 相关阅读:
    JavaScript语言基础
    IP地址分类及CIDR划分方法
    Python静态方法实现单实例模式
    【转载】http和socket之长连接和短连接
    DDoS攻击
    Vue自定义过滤器
    解决跨域问题
    微信菜单创建
    canvas标签(1)--线条、矩形、圆形、文本、阴影、抛小球
    Bootstrap CSS概览代码文字标注篇
  • 原文地址:https://www.cnblogs.com/konf/p/15207546.html
Copyright © 2011-2022 走看看