示例#1
0
def add_task(args):
    args = parse_login_command_line(args, ['input'], ['torrent'],
                                    alias={'i': 'input'},
                                    help=lixian_help.add)
    assert len(args) or args.input
    client = XunleiClient(args.username, args.password, args.cookies)
    links = []
    links.extend(args)
    if args.input:
        with open(args.input) as x:
            links.extend(line.strip() for line in x.readlines()
                         if line.strip())
    if not args.torrent:
        print 'Adding below tasks:'
        for link in links:
            print link
        client.add_batch_tasks(map(to_utf_8, links))
        for link in links:
            # add_batch_tasks doesn't work for bt task, add bt task one by one...
            if link.startswith('bt://') or link.startswith('magnet:'):
                client.add_task(link)
        print 'All tasks added. Checking status...'
        tasks = client.read_all_tasks()
        for link in links:
            found = filter_tasks(tasks, 'original_url', to_utf_8(link))
            if found:
                print found[0]['id'], found[0]['status_text'], link
            else:
                print 'unknown', link
    else:
        tasks = find_torrents_task_to_download(client, links)
        assert len(tasks) == len(links)
        print 'All tasks added:'
        for link, task in zip(links, tasks):
            print task['id'], task['status_text'], link
示例#2
0
def add_task(args):
	args = parse_login_command_line(args, ['input'], ['torrent'], alias={'i':'input'}, help=lixian_help.add)
	assert len(args) or args.input
	client = XunleiClient(args.username, args.password, args.cookies)
	links = []
	links.extend(args)
	if args.input:
		with open(args.input) as x:
			links.extend(line.strip() for line in x.readlines() if line.strip())
	if not args.torrent:
		print 'Adding below tasks:'
		for link in links:
			print link
		client.add_batch_tasks(map(to_utf_8, links))
		for link in links:
			# add_batch_tasks doesn't work for bt task, add bt task one by one...
			if link.startswith('bt://') or link.startswith('magnet:'):
				client.add_task(link)
		print 'All tasks added. Checking status...'
		tasks = client.read_all_tasks()
		for link in links:
			found = filter_tasks(tasks, 'original_url', to_utf_8(link))
			if found:
				print found[0]['id'], found[0]['status_text'], link
			else:
				print 'unknown', link
	else:
		tasks = find_torrents_task_to_download(client, links)
		assert len(tasks) == len(links)
		print 'All tasks added:'
		for link, task in zip(links, tasks):
			print task['id'], task['status_text'], link
示例#3
0
def addtask():
	rs={'msg':'','log':'','rst':'','data':{}}
	form = cgi.FieldStorage()
	if "url" in form:
		url=form["url"].value
	else:
		url = None
		rs['msg']="needurl"
		return rs	
		
	bt = 0
	if "tasktype" in form:
		bt = (form["tasktype"].value == "bt")	
		
		
	try:
		sys.path.append('core')
		from lixian_url import url_unmask
		url = url_unmask(url)			
		conf=readconf()		
		from lixian import XunleiClient
		client = XunleiClient(conf['username'],conf['password'],conf['LIXIAN_HOME'] +'/.xunlei.lixian.cookies')		
		if (url.startswith('http://') or url.startswith('ftp://')) and bt:
			torrent = urllib2.urlopen(url, timeout=60).read()		
			client.add_torrent_task_by_content(torrent, os.path.basename(url))
			rs['msg']="addok"
		else:
			client.add_task(url)	
			rs['msg']="addok"
	except Exception as inst:
		rs['msg']="addng"
		rs['log']=str(inst)
		
	return rs
示例#4
0
def download_task(args):
	args = parse_login_command_line(args, ['tool', 'output', 'output-dir', 'input'], ['delete', 'continue', 'overwrite', 'torrent', 'id', 'name', 'url'], alias={'o': 'output', 'i': 'input'}, default={'tool':'wget'})
	download = {'wget':wget_download, 'curl': curl_download, 'aria2':aria2_download, 'asyn':asyn_download, 'urllib2':urllib2_download}[args.tool]
	download_args = {'output_dir':args.output_dir, 'delete':args.delete, 'resuming':args._args['continue'], 'overwrite':args.overwrite}
	client = XunleiClient(args.username, args.password, args.cookies)
	links = None
	if len(args) > 1 or args.input:
		assert not(args.id or args.name or args.url or args.output)
		tasks = find_tasks_to_download(client, args)
		download_multiple_tasks(client, download, tasks, **download_args)
	elif args.torrent:
		# TODO: --torrent should support multiple torrent tasks. Workaround: use bt://infohash without --torrent.
		assert not(args.id or args.name or args.url)
		assert len(args) == 1
		tasks = find_torrents_task_to_download(client, [args[0]])
		assert len(tasks) == 1
		download_single_task(client, download, tasks[0], args.output, **download_args)
	else:
		if len(args) == 1:
			assert not args.url
			args.url = args[0]
		tasks = search_tasks(client, args, status='all', check=False)
		if not tasks:
			assert args.url
			print 'Adding new task %s ...' % args.url
			client.add_task(args.url)
			tasks = client.read_all_completed()
			tasks = filter_tasks(tasks, 'original_url', args.url)
			assert tasks, 'task not found, wired'
		if args.output:
			assert len(tasks) == 1
			download_single_task(client, download, tasks[0], args.output, **download_args)
		else:
			download_multiple_tasks(client, download, tasks, **download_args)
示例#5
0
def add_task(args):
    args = parse_login_command_line(
        args, ["input"], ["torrent"], alias={"i": "input", "bt": "torrent"}, help=lixian_help.add
    )
    assert len(args) or args.input
    client = XunleiClient(args.username, args.password, args.cookies)
    links = []
    links.extend(args)
    if args.input:
        with open(args.input) as x:
            links.extend(line.strip() for line in x.readlines() if line.strip())
    if not args.torrent:
        print "Adding below tasks:"
        for link in links:
            print link
        client.add_batch_tasks(map(to_utf_8, links))
        for link in links:
            # add_batch_tasks doesn't work for bt task, add bt task one by one...
            if link.startswith("bt://") or link.startswith("magnet:"):
                client.add_task(link)
        print "All tasks added. Checking status..."
        tasks = client.read_all_tasks()
        for link in links:
            found = filter_tasks(tasks, "original_url", to_utf_8(link))
            if found:
                print found[0]["id"], found[0]["status_text"], link
            else:
                print "unknown", link
    else:
        tasks = find_torrents_task_to_download(client, links)
        assert len(tasks) == len(links)
        print "All tasks added:"
        for link, task in zip(links, tasks):
            print task["id"], task["status_text"], link
示例#6
0
def download_task(args):
	args = parse_login_command_line(args,
	                                ['tool', 'output', 'output-dir', 'input'],
	                                ['delete', 'continue', 'overwrite', 'torrent', 'all', 'search', 'mini-hash', 'hash'],
									alias={'o': 'output', 'i': 'input', 'c':'continue'},
									default={'tool':get_config('tool', 'wget'),'delete':get_config('delete'),'continue':get_config('continue'),'output-dir':get_config('output-dir'), 'mini-hash':get_config('mini-hash'), 'hash':get_config('hash', True)},
	                                help=lixian_help.download)
	download = {'wget':wget_download, 'curl': curl_download, 'aria2':aria2_download, 'aria2c':aria2_download, 'axel':axel_download, 'asyn':asyn_download, 'urllib2':urllib2_download}[args.tool]
	download_args = {'output':args.output, 'output_dir':args.output_dir, 'delete':args.delete, 'resuming':args._args['continue'], 'overwrite':args.overwrite, 'mini_hash':args.mini_hash, 'no_hash': not args.hash}
	client = XunleiClient(args.username, args.password, args.cookies)
	links = None
	if len(args) > 1 or args.input:
		assert not args.output
		tasks = find_tasks_to_download(client, args)
		tasks = merge_bt_sub_tasks(tasks)
		download_multiple_tasks(client, download, tasks, download_args)
	elif args.torrent:
		assert not args.search
		assert len(args) == 1
		tasks = find_torrents_task_to_download(client, [args[0]])
		assert len(tasks) == 1
		download_single_task(client, download, tasks[0], download_args)
	elif len(args):
		assert len(args) == 1
		tasks = search_tasks(client, args, status='all', check=False)
		if not tasks:
			url = args[0]
			print 'Adding new task %s ...' % url
			client.add_task(to_utf_8(url))
			tasks = client.read_all_completed()
			tasks = filter_tasks(tasks, 'original_url', to_utf_8(url))
			assert tasks, 'task not found, wired'
		tasks = merge_bt_sub_tasks(tasks)
		if args.output:
			assert len(tasks) == 1
			download_single_task(client, download, tasks[0], download_args)
		else:
			download_multiple_tasks(client, download, tasks, download_args)
	elif args.all:
		#tasks = client.read_all_completed()
		tasks = client.read_all_tasks()
		download_multiple_tasks(client, download, tasks, download_args)
	else:
		usage(doc=lixian_help.download, message='Not enough arguments')
示例#7
0
def execute_args(args):
	download = {'wget':wget_download, 'urllib2':urllib2_download}[args.tool]

	if args.links:
		assert len(args.links) == 1
		url = args.links[0]
	else:
		url = args.link
	assert url or args.task_id or args.task_name

	client = XunleiClient(args.username, args.password, args.cookies)
	client.set_page_size(100)
	tasks = client.read_all_completed()
	if url:
		matched = filter(lambda t: t['original_url'] == url, tasks)
		if matched:
			task = matched[0]
		else:
			# if the task doesn't exist yet, add it
			# TODO: check space, check queue, delete after download done, add loggings
			client.add_task(url)
			tasks = client.read_all_completed()
			task = filter(lambda t: t['original_url'] == url, tasks)[0]
	elif args.task_name:
		task = filter(lambda t: t['name'].find(args.task_name) != -1, tasks)[0]
	elif args.task_id:
		task = filter(lambda t: t['id'] == args.task_id, tasks)[0]
	else:
		raise NotImplementedError()

	download_url = str(task['xunlei_url'])
	filename = args.output or task['name'].encode(sys.getfilesystemencoding())
	referer = str(client.get_referer())
	gdriveid = str(client.get_gdriveid())

	download(client, download_url, filename)
示例#8
0
def download_task(args):
    args = parse_login_command_line(
        args, ['tool', 'output', 'output-dir', 'input'],
        ['delete', 'continue', 'overwrite', 'torrent', 'search', 'mini-hash'],
        alias={
            'o': 'output',
            'i': 'input',
            'c': 'continue'
        },
        default={
            'tool': get_config('tool', 'wget'),
            'delete': get_config('delete'),
            'continue': get_config('continue'),
            'output-dir': get_config('output-dir'),
            'mini-hash': get_config('mini-hash')
        },
        help=lixian_help.download)
    download = {
        'wget': wget_download,
        'curl': curl_download,
        'aria2': aria2_download,
        'asyn': asyn_download,
        'urllib2': urllib2_download
    }[args.tool]
    download_args = {
        'output_dir': args.output_dir,
        'delete': args.delete,
        'resuming': args._args['continue'],
        'overwrite': args.overwrite,
        'mini_hash': args.mini_hash
    }
    client = XunleiClient(args.username, args.password, args.cookies)
    links = None
    if len(args) > 1 or args.input:
        assert not args.output
        tasks = find_tasks_to_download(client, args)
        tasks = merge_bt_sub_tasks(tasks)
        download_multiple_tasks(client, download, tasks, **download_args)
    elif args.torrent:
        assert not args.search
        assert len(args) == 1
        tasks = find_torrents_task_to_download(client, [args[0]])
        assert len(tasks) == 1
        download_single_task(client, download, tasks[0], args.output,
                             **download_args)
    else:
        assert len(args) == 1, 'Not enough argument'
        tasks = search_tasks(client, args, status='all', check=False)
        if not tasks:
            url = args[0]
            print 'Adding new task %s ...' % url
            client.add_task(url)
            tasks = client.read_all_completed()
            tasks = filter_tasks(tasks, 'original_url', url)
            assert tasks, 'task not found, wired'
        tasks = merge_bt_sub_tasks(tasks)
        if args.output:
            assert len(tasks) == 1
            download_single_task(client, download, tasks[0], args.output,
                                 **download_args)
        else:
            download_multiple_tasks(client, download, tasks, **download_args)
示例#9
0
def download_task(args):
    args = parse_login_command_line(
        args,
        ["tool", "output", "output-dir", "input"],
        ["delete", "continue", "overwrite", "torrent", "all", "search", "mini-hash", "hash"],
        alias={"o": "output", "i": "input", "c": "continue", "bt": "torrent"},
        default={
            "tool": get_config("tool", "wget"),
            "delete": get_config("delete"),
            "continue": get_config("continue"),
            "output-dir": get_config("output-dir"),
            "mini-hash": get_config("mini-hash"),
            "hash": get_config("hash", True),
        },
        help=lixian_help.download,
    )
    download = {
        "wget": wget_download,
        "curl": curl_download,
        "aria2": aria2_download,
        "aria2c": aria2_download,
        "axel": axel_download,
        "asyn": asyn_download,
        "urllib2": urllib2_download,
    }[args.tool]
    download_args = {
        "output": args.output,
        "output_dir": args.output_dir,
        "delete": args.delete,
        "resuming": args._args["continue"],
        "overwrite": args.overwrite,
        "mini_hash": args.mini_hash,
        "no_hash": not args.hash,
    }
    client = XunleiClient(args.username, args.password, args.cookies)
    links = None
    if len(args) > 1 or args.input:
        assert not args.output
        tasks = find_tasks_to_download(client, args)
        tasks = merge_bt_sub_tasks(tasks)
        download_multiple_tasks(client, download, tasks, download_args)
    elif args.torrent:
        assert not args.search
        assert len(args) == 1
        tasks = find_torrents_task_to_download(client, [args[0]])
        assert len(tasks) == 1
        download_single_task(client, download, tasks[0], download_args)
    elif len(args):
        assert len(args) == 1
        tasks = search_tasks(client, args, status="all", check=False)
        if not tasks:
            url = args[0]
            print "Adding new task %s ..." % url
            client.add_task(to_utf_8(url))
            tasks = client.read_all_completed()
            tasks = filter_tasks(tasks, "original_url", to_utf_8(url))
            assert tasks, "task not found, wired"
        tasks = merge_bt_sub_tasks(tasks)
        if args.output:
            assert len(tasks) == 1
            download_single_task(client, download, tasks[0], download_args)
        else:
            download_multiple_tasks(client, download, tasks, download_args)
    elif args.all:
        # tasks = client.read_all_completed()
        tasks = client.read_all_tasks()
        download_multiple_tasks(client, download, tasks, download_args)
    else:
        usage(doc=lixian_help.download, message="Not enough arguments")