예제 #1
0
def get_servertv24(url):
	user = ADDON.getSetting('sctv_user')
	password = ADDON.getSetting('sctv_pass')
	channelid = re.search(re.compile(r"\/(\d+)\/"), url).group(1)
	response = urlfetch.get(url)
	if not response:
		notify('Kiểm tra nguồn phát tại [COLOR red]tv24h.vn[/COLOR] và báo cho người phát triển.')
		return
	cookie=response.cookiestring;
	matches = re.search(r'\"channel_token\" value=\"(.+?)\"', response.body)
	channeltoken = matches.group(1)
	signin_url = 'http://tv24.vn/client/login/process'
	headers = {'Host': 'tv24.vn', 'Accept-Encoding': 'gzip, deflate, compress, identity, *', 'Accept': '*/*', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0', 'Cookie': cookie, 'Referer': 'http://web.tv24.vn/dang-nhap'}
	data = {'mobile': user, 'password': password}
	urlfetch.post(signin_url, headers=headers, data=data)
	data = {'channel_id': channelid, 'channel_token': channeltoken}
	response = urlfetch.post('http://tv24.vn/client/channel/link', headers=headers, data=data)
	if 'null' in response.body:
		if len(user) == 0  or len(password) == 0:
			sleep(1)
			alert(u'Bạn hãy đăng ký tài khoản trên web [COLOR red]http://tv24.vn[/COLOR] và nhập trong Setting của Addon VMF'.encode("utf-8"))
		else:
			notify('Link bị lỗi')
	else:
		json_data = json.loads(response.body)
		video_url = json_data['data']['PLAY_URL']
		notify("Đang getlink")
		video_url = vmf.sctv(channeltoken, video_url)
		sleep(5)
		if len(video_url) == 0:
			alert(u'Lỗi không lấy được link. Xin vui lòng thử lại.'.encode("utf-8"))
		return (video_url)
예제 #2
0
def go():
  url = sys.argv[0].replace("plugin://%s" % ADDON_ID, VIETMEDIA_HOST ) + sys.argv[2]
  if url == VIETMEDIA_HOST + '/':
    url += '?action=menu'
  
  #Settings
  if '__settings__' in url:
    ADDON.openSettings()
    return
  #Search
  if '__search__' in url:
    keyboardHandle = xbmc.Keyboard('','Enter search text')
    keyboardHandle.doModal()
    if (keyboardHandle.isConfirmed()):
      queryText = keyboardHandle.getText()
      if len(queryText) == 0:
        return
      queryText = urllib.quote_plus(queryText)
      url = url.replace('__search__', queryText)
    else:
      return
  data = fetch_data(url)
  if not data:
    return
  if data.get('error'):
    alert(data['error'])
    return
  
  if data.get("url"):
    play(data)
    return

  if data.get("content_type") and len(data["content_type"]) > 0:
    xbmcplugin.addSortMethod(HANDLE, xbmcplugin.SORT_METHOD_UNSORTED)
    xbmcplugin.addSortMethod(HANDLE, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
    xbmcplugin.addSortMethod(HANDLE, xbmcplugin.SORT_METHOD_DATE)
    xbmcplugin.addSortMethod(HANDLE, xbmcplugin.SORT_METHOD_GENRE)
    xbmcplugin.setContent(HANDLE, data["content_type"])

  listitems = range(len(data["items"]))
  for i, item in enumerate(data["items"]):
      listItem = xbmcgui.ListItem(label=item["label"], label2=item["label2"], iconImage=item["icon"], thumbnailImage=item["thumbnail"])
      if item.get("info"):
          listItem.setInfo("video", item["info"])
      if item.get("stream_info"):
          for type_, values in item["stream_info"].items():
              listItem.addStreamInfo(type_, values)
      if item.get("art"):
          listItem.setArt(item["art"])
      if item.get("context_menu"):
          listItem.addContextMenuItems(item["context_menu"])
      listItem.setProperty("isPlayable", item["is_playable"] and "true" or "false")
      if item.get("properties"):
          for k, v in item["properties"].items():
              listItem.setProperty(k, v)
      listitems[i] = (item["path"], listItem, not item["is_playable"])

  xbmcplugin.addDirectoryItems(HANDLE, listitems, totalItems=len(listitems))
  xbmcplugin.endOfDirectory(HANDLE, succeeded=True, updateListing=False, cacheToDisc=True)
예제 #3
0
def listen_now():
    ifl = xbmcgui.ListItem(utils.translate(30045))
    ifl.setArt({'thumb': thumbs.IMG_IFL, 'poster': thumbs.IMG_IFL})

    albums = xbmcgui.ListItem(utils.translate(30023))
    albums.setArt({'thumb': thumbs.IMG_ALBUM, 'poster': thumbs.IMG_ALBUM})

    stations = xbmcgui.ListItem(utils.translate(30021))
    stations.setArt({
        'thumb': thumbs.IMG_STATION,
        'poster': thumbs.IMG_STATION
    })

    playlists = xbmcgui.ListItem(utils.translate(30020))
    playlists.setArt({
        'thumb': thumbs.IMG_PLAYLIST,
        'poster': thumbs.IMG_PLAYLIST
    })

    items = [
        (utils.build_url(url=URL,
                         paths=['play', 'station'],
                         queries={'station_id': 'IFL'},
                         r_path=True,
                         r_query=True), ifl, False),
        (utils.build_url(URL, ['albums']), albums, True),
        (utils.build_url(URL, ['stations']), stations, True),
        (utils.build_url(URL, ['playlists']), playlists, True),
    ]

    # Only fetch new information if one full hour has passed
    # to keep things speedy on slow devices
    try:
        last_check = ADDON.getSetting('listen_now_last_update')

    except:
        last_check = -1

    from_cache = True
    if last_check != time.strftime('%Y%m%d%H'):
        from_cache = False
        ADDON.setSetting('listen_now_last_update', time.strftime('%Y%m%d%H'))

    primary_header, situations = gmusic.get_listen_now_situations(from_cache)

    if primary_header and situations:
        situations = xbmcgui.ListItem(primary_header)
        situations.setArt({
            'thumb': thumbs.IMG_ALBUM,
            'poster': thumbs.IMG_ALBUM
        })

        # Add Situations after IFL
        items.insert(1,
                     (utils.build_url(URL, ['situations']), situations, True))

    listing.list_items(items)
    def login(self):
        # Set Kodis locale to super class
        locale_code = xbmc.getLanguage(xbmc.ISO_639_1)
        locale_code = locale.normalize(locale_code).split('.')[0]
        if not locale_code:
            locale_code = 'en_US'

        self.locale = locale_code

        if self._is_logged_in and not self._should_test_login():
            return True

        username = ADDON.getSetting('username')
        password = ADDON.getSetting('password')
        device_id = ADDON.getSetting('device_id')
        authtoken = ADDON.getSetting('authtoken')

        if authtoken:
            self.android_id = device_id
            self.session._authtoken = authtoken
            self.session.is_authenticated = True

            ADDON.setSetting('last_login_check', str(int(time.time())))
            try:
                # Send a test request to ensure our authtoken
                # is still valide and working
                self.get_registered_devices()
                self._is_logged_in = True
                return True

            except:
                # Faild with the test-request so we set
                # "is_authenticated=False" and go through the login-process
                # again to get a new "authtoken"
                self.session.is_authenticated = False

        if device_id:
            success = super(GMusic, self).login(username, password, device_id,
                                                self.locale)

            if success:
                ADDON.setSetting('authtoken', self.session._authtoken)
                self._is_logged_in = True
                return True

        utils.notify(utils.translate(30048), '')
        ADDON.setSetting('is_setup', 'false')

        # Prevent further addon execution in case we failed with the login-process
        raise SystemExit
예제 #5
0
def play_track(track_id, store_id=None, track_title='', station_id=None):
    track = _get_track_details(track_id, store_id)

    item = None
    if track:
        item = listing.build_song_listitems([track])[0][1]

    else:
        item = xbmcgui.ListItem(track_title)
        item.setArt({'thumb': thumbs.IMG_ALBUM, 'poster': thumbs.IMG_ALBUM})

    item.setPath(
        GMUSIC.get_stream_url(song_id=track_id,
                              quality=ADDON.getSetting('stream_quality')))

    xbmcplugin.setResolvedUrl(ADDON_HANDLE, True, item)

    GMUSIC.increment_song_playcount(track_id)

    # If the current track is from a station and within the last five (5)
    # playlist tracks, we get a new set of tracks for this station and
    # add it to the playlist.
    if station_id:
        playlist = xbmc.PlayList(xbmc.PLAYLIST_MUSIC)
        if playlist.getposition() >= (len(playlist) - 5):
            queue_station(station_id)
def _get_library_last_updated():
    try:
        library_last_updated = int(ADDON.getSetting('library_last_updated'))
    except Exception:
        library_last_updated = 0

    return library_last_updated
예제 #7
0
def setup_addons(root):


    addon_obj = sendJSONRPC('Addons.GetAddons',["unknown","unknown","all",["name","enabled"]])
    enabled_addons = []

    for addon in addon_obj['result']['addons']:
        enabled_addons.append(addon['addonid'])


    for category in root:
        for addon in category:

            if addon.attrib['type'] == 'plugin':
                addon_id = addon.attrib['type']+'.' +addon.attrib['prefix']+'.'+addon.attrib['name']

            elif addon.attrib['type'] == 'website':
                addon_id = 'plugin.program.chrome.launcher'
            else:
                continue

            enabled_string = category.attrib['type'] + '_' + addon.attrib['name']
            enabled = ADDON.getSetting(enabled_string)

            if addon_id in enabled_addons and enabled == 'true':
                if category.attrib['type'] == 'series':
                    cfg.series_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})
                if category.attrib['type'] == 'movies':
                    cfg.movie_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})
                if category.attrib['type'] == 'music':
                    cfg.music_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})
                if category.attrib['type'] == 'live':
                    cfg.live_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})
                if category.attrib['type'] == 'sports':
                    cfg.sports_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})
def _get_update_interval():
    try:
        update_interval = int(ADDON.getSetting('update_interval'))
    except Exception:
        update_interval = 0

    return update_interval * 60 * 60  # We need seconds
예제 #9
0
def check_fshare():
	username = ADDON.getSetting('fshare_username')
	password = ADDON.getSetting('fshare_password')
	login_url = 'https://www.fshare.vn/login'
	response = urlfetch.fetch(login_url)
	#alert(username)
	#alert(password)
	csrf_pattern = '\svalue="(.+?)".*name="fs_csrf"'
	csrf=re.search(csrf_pattern, response.body)
	fs_csrf = csrf.group(1)
	#alert(fs_csrf)
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0', 'Cookie': response.cookiestring}
	data = {
				"LoginForm[email]"		: username,
				"LoginForm[password]"	: password,
				"fs_csrf"				: fs_csrf
			}
	response = urlfetch.post(login_url, headers=headers, data=data)
	if 'Sai tên đăng nhập hoặc mật khẩu.' in response.body:
		alert('Sai tên đăng nhập hoặc mật khẩu. Xin vui lòng kiểm tra lại user và password', '[COLOR yellow]Fshare thông báo[/COLOR]')
		sys.exit("Error message")
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0', 'Cookie': response.cookiestring}
	check_acc = urlfetch.get('https://www.fshare.vn/account/infoaccount', headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0', 'Cookie': response.cookiestring})
	regex = r"data-target=\"#member\">(.+?)</a>"
	ma_tk=re.search(regex, check_acc.body)
	ma_tk=ma_tk.group(1)
	ma_tk='Loại tài khoản: [COLOR red]'+ma_tk+'[/COLOR]'
	date_create=re.search(r"<dt>Ngày tham gia</dt>.*\n.+?<dd>(.+?)</dd>", check_acc.body)
	date_create=date_create.group(1)
	date_create=date_create.rstrip()
	date_create='Ngày tham gia: [COLOR red]'+date_create+'[/COLOR]'
	acc_id=re.search(r"<dt>Mã Tài Khoản</dt>.*\n.+?<dd>(.+?)</dd>",check_acc.body)
	acc_id=acc_id.group(1)
	acc_id='Mã tài khoản: [COLOR red]'+acc_id+'[/COLOR]'
	expire_date=re.search(r"<dt>Hạn dùng</dt>.*\n.+?<dd>(.+?)</dd>",check_acc.body)
	expire_date=expire_date.group(1)
	#expire='Hạn dùng: [COLOR red]'+expire+'[/COLOR]'
	bonus=re.search(r"<dt>Điểm thưởng</dt>.*\n.+?<dd>(.+?)</dd>",check_acc.body)
	bonus=bonus.group(1)
	bonus='Điểm thưởng: [COLOR red]'+bonus+'[/COLOR]'
	check_acc = urlfetch.get('https://www.fshare.vn/account/profile', headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0', 'Cookie': response.cookiestring})
	regex = r'Địa chỉ email</label>.+<div class=\"col-sm-8.+text-primary\">(.+?)<\/div>'
	email = re.search(regex, check_acc.body)
	email = email.group(1)
	email = 'Địa chỉ e-mail: [COLOR red]'+email+'[/COLOR]'
	info=acc_id+'\n'+ma_tk+'\n'+date_create+'\n'+'Hạn dùng: [COLOR red]'+expire_date+'[/COLOR]\n'+bonus+'\n'+email
	TextBoxes('Trạng thái tài khoản fshare', info)
예제 #10
0
def getAcestream(url):
	if 'plugin:' in url:
		ace_link = url
	else:
		ace_option = ADDON.getSetting('ace')
		if ace_option == 'true':
			ace_link = 'plugin://program.plexus/?mode=1&url='+url+'&name=Video'
		else:
			response = fetch_data('http://127.0.0.1:6878/webui/api/service?method=get_version&format=jsonp&callback=mycallback')
			if not response:
				alert('Vui lòng khởi động ứng dụng Acestream. Cài đặt tại [COLOR yellow]acestream.org[/COLOR]')
				return
			else:
				ace_link = url.replace("acestream://", "http://localhost:6878/ace/getstream?id=")
				
	return ace_link		
    def _should_test_login(self):
        try:
            last_login_check = int(ADDON.getSetting('last_login_check'))

        except:
            last_login_check = 0

        if last_login_check == 0:
            return True

        # We check every 1 hours
        elif (last_login_check + 3600) < time.time():
            return True

        else:
            return False
예제 #12
0
def get_notif():
	NOTIF = ADDON.getSetting("notif")
	try:
		response = urlfetch.get('http://repo.kodi.vn/Phude/notif.txt')
		matches = re.search(r"(\d+)-", response.body)
		check = matches.group(1)
		matches = re.search(r"-(.+)", response.body)
		notif1 = matches.group(1)
		if NOTIF == check:
			#TextBoxes('VietmediaF thông báo', notif1)
			xbmc.log('No notif')	
		else:
			TextBoxes('VietmediaF thông báo', notif1)
			addon = xbmcaddon.Addon()
			addon.setSetting(id='notif', value=check)
			pass		
	except:
		pass
예제 #13
0
def _play(path):
    utils.execute_jsonrpc(method='Playlist.Clear',
                          params={'playlistid': xbmc.PLAYLIST_MUSIC})

    utils.execute_jsonrpc(method='Playlist.Add',
                          params={
                              'playlistid': xbmc.PLAYLIST_MUSIC,
                              'item': {
                                  'directory':
                                  utils.build_url(url=URL,
                                                  paths=path,
                                                  r_path=True)
                              }
                          })

    utils.execute_jsonrpc(
        method='Player.Open',
        params={'item': {
            'playlistid': xbmc.PLAYLIST_MUSIC,
            'position': 0
        }})

    if ADDON.getSetting('auto_fullscreen') == 'true':
        utils.execute_jsonrpc('GUI.SetFullscreen', {'fullscreen': True})
예제 #14
0
def get_fshare(url):
	response = urlfetch.get(url)
	if 'Tập tin quý khách yêu cầu không tồn tại' in response.body:
		notify('Tập tin quý khách yêu cầu không tồn tại')
		sys.exit("Error message")
	def checkpass(url):
		response = urlfetch.get(url)
		if 'Tập tin có mật khẩu bảo vệ' in response.body:
			keyboardHandle = xbmc.Keyboard('','Nhập mật khẩu bảo vệ của tập tin')
			keyboardHandle.doModal()
			if (keyboardHandle.isConfirmed()):
				queryText = keyboardHandle.getText()
				if len(queryText) == 0:
					return
				queryText = urllib.quote_plus(queryText)
				password1 = queryText
				return password1
			else:
				return
	
	url = url.replace('http://', 'https://')
	if '-' in url:
		matches = re.search(r"(http.*)-(.*)", url)
		password1 = matches.group(2)
		url = matches.group(1)
		
	else:
		password1 = checkpass(url)
		#notify(password1)

	match = re.search(r"(https://)", url)
	if not match:
		url = 'https://'+url
	else:
		url = url
		
	username = ADDON.getSetting('fshare_username')
	password = ADDON.getSetting('fshare_password')
	fshare_option = ADDON.getSetting('fshare_option')
	F = 'U2FsdGVkX1+oRjEcO06h18WuKSLFnniVhsVxR1l2aUWLmQAC3v4KfeXi5Xx5I11I'
	def check_user(session_id):
		f = 'U2FsdGVkX1+fntz3Jv92YvlUvQk6pEhgPiGKJcEBVtVH9lpd8YS6idK8G9Lr7etACq/sLnO12tI2klwOz9QQWQ'
		headers = {'cookie': "session_id="+session_id}
		response = urlfetch.get(vmf.gibberishAES(f, 'Faidemteiv'), headers=headers)
		jStr = json.loads(response.body)
		c = jStr['account_type']
		return(c)
	
	def fshare_download(url, username, password):
		payload = '{"app_key":"L2S7R6ZMagggC5wWkQhX2+aDi467PPuftWUMRFSn","user_email":"'+username+'","password":"******"}'
		headers = {'cache-control': "no-cache"}
		f = 'U2FsdGVkX1+DNcAz9bYFd5cYzmMSxkO6cjEESsnvnFDRwI/cJ7q9e3PMqRvzhaQG/3AKt6uXJwS1dzBpPGlotw'
		response = urlfetch.post(vmf.gibberishAES(f, 'Faidemteiv'), data=payload, headers=headers)
		
		if '405' in response.body:
			alert('Không đăng nhập được. Kiểm tra lại username và mật khẩu.\nUser: [COLOR yellow]' + username+'[/COLOR]\nPassword: [COLOR yellow]'+password+'[/COLOR]','Fshare thông báo')
			sys.exit	
		
		jStr = json.loads(response.body)
		code = jStr['code']
		msg = jStr['msg']
		token = jStr['token']
		session_id = jStr['session_id']
		t = check_user(session_id)
		t = str(t)
		
		if code == 200:
			notify ('Đăng nhập thành công')
			notify ('Tài khoản là: [COLOR red]'+t+'[/COLOR]')
			f = 'U2FsdGVkX1/vJ77W7WEfjOu+hZeMdqup95C+GE85n+a+y7jPpVuWQ/84LkPrQvpvA0xuchHX/FwK++XMK+EnVg'
			data   = '{"token" : "%s", "url" : "%s", "password" : "%s"}'
			header = {'Cookie' : 'session_id=' + session_id}
			data   = data % (token, url, password1)
			t = urlfetch.post(vmf.gibberishAES(f, 'Faidemteiv'), headers=header, data=data)
			jStr = json.loads(t.body)
			video_url = jStr['location']
			if not video_url:
				notify('Link hỏng')
		return video_url	
		
	def getlink(url, username, password):
		login_url = 'https://www.fshare.vn/login'
		logout_url = 'https://www.fshare.vn/logout'
		download_url = 'https://www.fshare.vn/download/get'
		notify (u'VMF Getlink system'.encode("utf-8"))
		response = fetch_data(login_url)
		if not response:
			return

		csrf_pattern = '\svalue="(.+?)".*name="fs_csrf"'

		csrf=re.search(csrf_pattern, response.body)
		fs_csrf = csrf.group(1)

		headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0', 'Cookie': response.cookiestring}
		
		data = {
				"LoginForm[email]"		: username,
				"LoginForm[password]"	: password,
				"fs_csrf"				: fs_csrf
			}

		response = fetch_data(login_url, headers, data)
		if 'Sai tên đăng nhập hoặc mật khẩu.' in response.body:
			alert('Sai tên đăng nhập hoặc mật khẩu. Xin vui lòng kiểm tra lại user và password', '[COLOR yellow]Fshare thông báo[/COLOR]')
			sys.exit
		check_acc = fetch_data('https://www.fshare.vn/account/infoaccount', headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0', 'Cookie': response.cookiestring})
		regex = r"data-target=\"#member\">(.+?)</a>"
		ma_tk=re.search(regex, check_acc.body)
		ma_tk=ma_tk.group(1)
		notify1('Tài khoản Fshare của bạn là: [COLOR red]'+ma_tk+'[/COLOR]')
		headers['Cookie'] = response.cookiestring
		headers['Referer'] = url
		direct_url = ''
		attempt = 1
		MAX_ATTEMPTS = 3
		file_id = os.path.basename(url)
		if response and response.status == 302:
			notify (u'Đang xử lý lấy link'.encode("utf-8"))
			while attempt < MAX_ATTEMPTS:
				if attempt > 1: sleep(2)
				notify (u'Lấy link lần thứ #%s'.encode("utf-8") % attempt)
				attempt += 1

				response = fetch_data(url, headers, data)

				if response.status == 200:
					csrf=re.search(csrf_pattern, response.body)
					fs_csrf = csrf.group(1)
					data = {
							'fs_csrf'					: fs_csrf,
							'ajax'						: 'download-form',
							'DownloadForm[pwd]'			: password1,
							'DownloadForm[linkcode]'	: file_id
						}

					response=fetch_data(download_url, headers, data);

					json_data = json.loads(response.body)

					if json_data.get('url'):
						direct_url = json_data['url']
						
					elif json_data.get('msg'):
						notify(json_data['msg'].encode("utf-8"))
					else:
						notify('Kiểm tra lại user, mật khẩu, mã password')
				elif response.status == 302:
					direct_url = response.headers['location']
					
				else:
					notify (u'Lỗi khi lấy link, mã lỗi #%s. Đang thử lại...'.encode("utf-8") % response.status)

			response = fetch_data(logout_url, headers)
			if response.status == 302:
				notify (u'Done'.encode("utf-8"))
		else:
			notify (u'Lấy link không thành công.'.encode("utf-8"))
		if len(direct_url) > 0:
			notify (u'Đã lấy được link'.encode("utf-8"))
		else:
			notify (u'Có sự cố khi lấy link. Xin vui lòng thử lại'.encode("utf-8"))

		return direct_url
	#+++++++++++++++++	
	if fshare_option == "true":
		if len(username) == 0  or len(password) == 0:
			alert(u'Bạn chưa nhập [COLOR red]VMF[/COLOR] code hoặc tài khoản cá nhân Fshare'.encode("utf-8"), 'Soạn tin: [COLOR red]VMF[/COLOR] gửi [COLOR red]8798[/COLOR] để lấy VMF Code')
			return
		else:
			try:
				notify('Đang lấy link')
				#return fshare_download(url, username, password)
				return getlink(url, username, password)
			except:
				notify('Không đăng nhập được tài khoản')
				
			
	
	if fshare_option == "false":	
		if len(USER_VIP_CODE) == 0:
			alert(u'Bạn chưa có tài khoản cá nhân Fshare'.encode("utf-8"))
			return
		if len(USER_VIP_CODE) > 0:
			download_url = 'https://www.fshare.vn/download/get'
			
			try:
				response = fetch_data(VIETMEDIA_HOST + vmf.gibberishAES(F1, 'idok'))
				json_data = json.loads(response.body)
				a =json_data['ttt']
				c = a.split('|')
				for x in c:
					
					file_id = re.search(r"file\/(.+)", url).group(1)
					headers = { 
								'User-Agent' 	: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
								'Cookie':'session_id='+x
							}
					response = urlfetch.get(url, headers=headers)
					if 'Tài khoản VIP là tài khoản trả tiền của Fshare' in response.body or 'Tài khoản BUNDLE là tài khoản KM theo gói Internet FPT' in response.body and 'getlink' not in response.body:
						fs_csrf = re.search(r"fs_csrf:'(.+?)'", response.body).group(1)
						headers = { 
									'User-Agent' 	: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
									'Cookie':'session_id='+x
								}
						
						data = {
									'fs_csrf'					: fs_csrf,
									'ajax'						: 'download-form',
									'DownloadForm[pwd]'			: '',
									'DownloadForm[linkcode]'	: file_id,
									'underfined'				: 'underfined'
								}
						response=urlfetch.post(download_url, headers=headers, data=data);
						json_data = json.loads(response.body)
						if json_data.get('url'):
							if len(json_data['url']) > 0:
								video_url =	json_data['url']
								return (video_url)
						break			
			except Exception as e:
				alert('Sử dụng tài khoản Fshare VIP cá nhân để play. Liên hệ [COLOR yellow][email protected][/COLOR] để mua Fshare VIP', 'VMF code lỗi')
				pass									
예제 #15
0
from time import sleep
from addon import alert, notify,notify1, TextBoxes, ADDON, ADDON_ID, ADDON_PROFILE, LOG, PROFILE
import json
import random
import xbmc,xbmcgui
import pyxbmct
from config import VIETMEDIA_HOST
import urllib
import os, sys
#import requests
import time
import vmfdecode as vmf
#import urlresolver


USER_VIP_CODE = ADDON.getSetting('user_vip_code')
ADDON_NAME = ADDON.getAddonInfo("name")
PROFILE_PATH = xbmc.translatePath(ADDON_PROFILE).decode("utf-8")
T='aHR0cDovL3BsYXllci50cnVuZ3VpdC5uZXQvZ2V0P3VybD0='
F1 = 'U2FsdGVkX18tMUoo3k2cYautKONoQ5xHCpLDHBz/RNhTLRbBvHKgrtMKiRks5tw4'
HOME = xbmc.translatePath('special://home/')
USERDATA = os.path.join(xbmc.translatePath('special://home/'), 'userdata')
ADDONDATA = os.path.join(USERDATA, 'addon_data', ADDON_ID)
DIALOG = xbmcgui.Dialog()
vDialog = xbmcgui.DialogProgress()

def fetch_data(url, headers=None, data=None):
  	if headers is None:

  		headers = { 
    				'User-agent'	: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0',
예제 #16
0
import urllib,urllib2
import os
import xbmc,xbmcplugin,xbmcgui,xbmcaddon
import getlink
import simplejson as json
from config import VIETMEDIA_HOST
from addon import alert, notify, ADDON, ADDON_ID, ADDON_PROFILE
from platform import PLATFORM
import uuid

reload(sys);
sys.setdefaultencoding("utf8")

HANDLE = int(sys.argv[1])

CURRENT_PATH = ADDON.getAddonInfo("path")
PROFILE_PATH = xbmc.translatePath(ADDON_PROFILE).decode("utf-8")

VERSION = ADDON.getAddonInfo("version")
USER = ADDON.getSetting('user_id')
USER_PIN_CODE = ADDON.getSetting('user_pin_code')

def fetch_data(url, headers=None):
  visitor = get_visitor()
  if headers is None:
    headers = { 
                'User-agent'    : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0',
                'Referers'      : 'http://www..google.com',
                'X-Visitor'     : visitor,
                'X-Version'     : VERSION,
                'X-User'        : USER,
예제 #17
0
def go():
  
	url = sys.argv[0].replace("plugin://%s" % ADDON_ID, VIETMEDIA_HOST ) + sys.argv[2]
  
	if url == VIETMEDIA_HOST + '/':
		url += '?action=menu'
	
	#Settings
	if 'textbox' in url or 'Textbox' in url:
		url = url.replace(VIETMEDIA_HOST+'/?action=textbox&', '')
		
		url = urllib.unquote_plus(url)
		content = openURL(url)
		TextBoxes(ADDON_NAME, content)
		return
		
	if 'checkupdate' in url:
		forceUpdate()
	if 'check_fshare' in url:
		#notify('đang check')
		check_fshare()
		return
	if 'addon' in url:
		url = url.replace(VIETMEDIA_HOST+'/?action=addon&', '')
		url=urllib.unquote(url)
		install_repo(url)
		return
		
	if 'clearCache' in url:
		clearCache()
		return
	if 'viewlog' in url:
		viewLogFile()
		return
	if '__settings__' in url:
		ADDON.openSettings()
		return
	if 'addon' in url:
		install_repo(url)
		return
	#Search
	if '__search__' in url:
		
		keyboardHandle = xbmc.Keyboard('','VietmediaF')
		keyboardHandle.doModal()
		if (keyboardHandle.isConfirmed()):
			queryText = keyboardHandle.getText()
			if len(queryText) == 0:
				return
			queryText = urllib.quote_plus(queryText)
			url = url.replace('__search__', queryText)
		else:
			return
	if '__download__' in url:
		download(url)
		return
	if '__lock__' in url:
		add_lock_dir(url)
		return
	if '__unlock__' in url:
		remove_lock_dir(url)
		return
	
	
	if check_lock(url):
		dialog = xbmcgui.Dialog()
		result = dialog.input('Nhập mã khoá', type=xbmcgui.INPUT_ALPHANUM, option=xbmcgui.ALPHANUM_HIDE_INPUT)
		if len(result) == 0 or result != LOCK_PIN:
			notify('Sai mật mã, vui lòng nhập lại')
			return

	data = fetch_data(url)
	if not data:
		return
	if data.get('error'):
		alert(data['error'])
		return
  
	if data.get("url"):
		play(data)
		return

	if not data.get("items"):
		return
    
	if data.get("content_type") and len(data["content_type"]) > 0:
		xbmcplugin.addSortMethod(HANDLE, xbmcplugin.SORT_METHOD_UNSORTED)
		xbmcplugin.addSortMethod(HANDLE, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
		xbmcplugin.addSortMethod(HANDLE, xbmcplugin.SORT_METHOD_DATE)
		xbmcplugin.addSortMethod(HANDLE, xbmcplugin.SORT_METHOD_GENRE)
		xbmcplugin.setContent(HANDLE, data["content_type"])

	listitems = range(len(data["items"]))
	for i, item in enumerate(data["items"]):
		lock_url = item["path"].replace("plugin://%s" % ADDON_ID, VIETMEDIA_HOST )
		lock_url = re.sub('\?','/?',lock_url)
		label = item["label"]
		if check_lock(lock_url):
			label = "*" + label
		listItem = xbmcgui.ListItem(label=label, label2=item["label2"], iconImage=item["icon"], thumbnailImage=item["thumbnail"])
		if item.get("info"):
			listItem.setInfo("video", item["info"])
		if item.get("stream_info"):
			for type_, values in item["stream_info"].items():
				listItem.addStreamInfo(type_, values)
		if item.get("art"):
			listItem.setArt(item["art"])
      
		menu_context = []
		if item.get("context_menu"):
			listItem.addContextMenuItems(item["context_menu"])
		elif item["is_playable"] == True:
          
			title = item["label"]
			title = re.sub('\[.*?]','',title)
			title = re.sub('\s','-',title)
			title = re.sub('--','-',title)
			title = re.sub('--','-',title)
			title = re.sub('[\\\\/*?:"<>|#]',"",title)
			title = remove_accents.remove_accents(title)
			command = 'XBMC.RunPlugin(%s&d=__download__&file_name=%s)' % (item["path"], title)
			menu_context.append(( 'Download...', command, ))

		command = 'XBMC.RunPlugin(%s&d=__lock__)' % item["path"]
		menu_context.append(( 'Khoá mục này', command, ))
		command = 'XBMC.RunPlugin(%s&d=__unlock__)' % item["path"]
		menu_context.append(( 'Mở khoá mục này', command, ))
		listItem.addContextMenuItems( menu_context )

		listItem.setProperty("isPlayable", item["is_playable"] and "true" or "false")
		if item.get("properties"):
			for k, v in item["properties"].items():
				listItem.setProperty(k, v)
		listitems[i] = (item["path"], listItem, not item["is_playable"])

	xbmcplugin.addDirectoryItems(HANDLE, listitems, totalItems=len(listitems))
  
	if VIEWMODE == 'true':
		if '?action=menu' in url or 'node_id=77' in url or 'node_id=86' in url or 'node_id=79' in url or 'thread_id=18666' in url or 'thread_id=15858' in url or 'thread_id=21762' in url or 'thread_id=21802' in url or 'thread_id=15492' in url or 'thread_id=104' in url or 'node_id=13' in url or 'node_id=19' in url:
			xbmc.executebuiltin('Container.SetViewMode(%d)' % 500)
  
  
	hello()
	
	xbmcplugin.endOfDirectory(HANDLE, succeeded=True, updateListing=False, cacheToDisc=True)
예제 #18
0
def get_fptplay(url):
    #fptplay_option = ADDON.getSetting('fptplay_option')

    user = ADDON.getSetting('fptplay_user')
    password = ADDON.getSetting('fptplay_pass')
    country_code = ADDON.getSetting('country_code')

    exec(
        f**k(
            'cj11cmxmZXRjaC5nZXQoJ2h0dHBzOi8vdGV4dHVwbG9hZGVyLmNvbS9kejdweS9yYXcnKQ=='
        ))
    headers = {
        'cookie':
        f**k(r.body),
        'origin':
        'https://fptplay.vn',
        'accept-encoding':
        'gzip, deflate, br',
        'x-requested-with':
        'XMLHttpRequest',
        'accept-language':
        'en,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6',
        'x-key':
        '123456',
        'content-type':
        'application/x-www-form-urlencoded; charset=UTF-8',
        'accept':
        'application/json, text/javascript, */*; q=0.01',
        'referer':
        url,
        'authority':
        'fptplay.vn',
        'user-agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    }
    if 'livetv' in url:
        match = re.search(r"livetv\/(.+)", url)
        tv_id = match.group(1)

        data = {
            "id": tv_id,
            "type": "newchannel",
            "quality": "3",
            "mobile": "web"
        }

        exec(
            f**k(
                'cmVzcG9uc2UgPSB1cmxmZXRjaC5wb3N0KCdodHRwczovL2ZwdHBsYXkudm4vc2hvdy9nZXRsaW5rbGl2ZXR2JywgaGVhZGVycz1oZWFkZXJzLCBkYXRhPWRhdGEp'
            ))
        video_url = json.loads(response.body)['stream']

    else:
        match = re.search(r"(.{24})\.html", url)
        movie_id = match.group(1)
        if 'tap' in url:
            match = re.search(r"tap-(\d+)", url)
            episode = match.group(1)
        else:
            episode = '1'
        data = {
            "id": movie_id,
            "type": "newchannel",
            "quality": "3",
            "episode": episode,
            "mobile": "web"
        }
        exec(
            f**k(
                'cmVzcG9uc2UgPSB1cmxmZXRjaC5wb3N0KCdodHRwczovL2ZwdHBsYXkudm4vc2hvdy9nZXRsaW5rJywgaGVhZGVycz1oZWFkZXJzLCBkYXRhPWRhdGEp'
            ))
        video_url = json.loads(response.body)['stream']

    return video_url + "|User-Agent=vietmediaf&Origin=https%3A%2F%2Ffptplay.vn"
    except Exception:
        library_last_updated = 0

    return library_last_updated


if __name__ == '__main__':
    monitor = xbmc.Monitor()
    while not monitor.abortRequested():
        if monitor.waitForAbort(30):
            # Abort was requested while waiting. We should exit
            break

        update_interval = _get_update_interval()
        library_last_updated = _get_library_last_updated()

        if update_interval == 0:
            continue

        if time.time() >= library_last_updated + update_interval:
            ADDON.setSetting('library_last_updated', str(int(time.time())))

            try:
                if GMUSIC.login():
                    GMUSIC.get_my_library_songs(from_cache=False)
                    GMUSIC.get_my_library_artists(from_cache=False)
                    GMUSIC.get_my_library_albums(from_cache=False)

            except Exception:
                continue
예제 #20
0
                    cfg.movie_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})
                if category.attrib['type'] == 'music':
                    cfg.music_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})
                if category.attrib['type'] == 'live':
                    cfg.live_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})
                if category.attrib['type'] == 'sports':
                    cfg.sports_addons.append({'name':addon.attrib['name'], 'id':addon_id,'function_type':addon.attrib['function_type'],'function_vars':addon.attrib['function_vars']})



# check installed vs. supported to understand which addons the script can access
#setup_addons(supported_movie_addons, supported_series_addons, supported_sports_addons, supported_live_addons, supported_music_addons)
setup_addons(tree_root)

# save to config object
cfg.socket_url       = ADDON.getSetting('socket_url')        #'http://ec2-54-191-98-39.us-west-2.compute.amazonaws.com'
cfg.socket_port      = int(ADDON.getSetting('socket_port'))  #3000
cfg.user_id          = ADDON.getSetting('authcode')

# save to log
log.info('remote:  \t%s:%s' % (cfg.socket_url, cfg.socket_port))
log.info('authcode:\t%s' % cfg.user_id)
log.info('Enabled Addons..')
temp = '\tmovies: '
for name in cfg.movie_addons:
    temp = temp + '[' + name['name'] + ']'
log.info(temp)
temp = '\tseries: '
for name in cfg.series_addons:
    temp = temp + '[' + name['name']+ ']'
log.info(temp)
예제 #21
0
def get_fptplay(url):
	fptplay_option = ADDON.getSetting('fptplay_option')
	
	#Xem tv có thể không cần account hoặc có account hoặc có code VMF
	
	if 'livetv' in url:
		if fptplay_option == 'true':
			
			user = ADDON.getSetting('fptplay_user')
			password = ADDON.getSetting('fptplay_pass')
			country_code = ADDON.getSetting('country_code')
			matches = re.search(r"(.+)\s", country_code)
			country_code = matches.group(1)
			params = {'country_code': country_code, 'phone': user, 'password': password, 'submit': ''}
			headers = {'User_Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0','Referer':'https://fptplay.net/'}
			url_login = '******'
			url_logout = 'https://fptplay.net/user/logout'
			if len(user) == 0  or len(password) == 0:
				sleep(2)
				notify(u'Bạn nên nhập user và pasword của FPTplay.net. Đăng ký trên trang web http://fptplay.net'.encode("utf-8"))
				#ADDON.openSettings()
			
			s = requests.Session()
			r = s.get('https://fptplay.net')
			r = s.post(url_login, headers=headers, data=params)
			headers = { 
						'Referer'			: url,
						'X-KEY'				: '123456',
						'X-Requested-With'	: 'XMLHttpRequest'
					}
			
			#Kiểm tra live tivi 
			match = re.search(r'\/livetv\/(.*)$', url)
			if match:
				channel_id = match.group(1)
				data = {
					'id' 	   : channel_id,
					'type'     : 'newchannel',
					'quality'  : 3,
					'mobile'   : 'web'
				}
				r = s.post('https://fptplay.net/show/getlinklivetv', headers=headers, data=data)
				
				response = fetch_data(url_logout, headers)
				if response.status == 302:
					notify (u'Done'.encode("utf-8"))
				video_url=json.loads(r.content)['stream']+'User-Agent=Mozilla/5.0 (compatible; MSIE 10.0; Trident/6.0; IEMobile/10.0; ARM; Touch; WINDOWS;MSI;MSI MSI-MS-7996;)'
				
				return video_url

				
			#match = re.search(r'\-([\w]+)\.html', url)
			#if not match:
			#	return

		if fptplay_option == 'false':
			if len(USER_VIP_CODE) == 0:
				alert(u'Bạn chưa nhập [COLOR red]VMF[/COLOR] code hoặc tài khoản cá nhân FPTPLAY'.encode("utf-8"), 'Soạn tin: [COLOR red]VMF[/COLOR] gửi [COLOR red]8798[/COLOR] để lấy VMF Code')
				return
			if len(USER_VIP_CODE) > 0:
				try:
					url_account = VIETMEDIA_HOST + '?action=fptplay_account'
					response = fetch_data(url_account)
					json_data = json.loads(response.body)
					user = json_data['username']
					xbmc.log(user)
					password = json_data['password']
					xbmc.log(password)
					country_code = 'VN'
					#Code getlink
					params = {'country_code': country_code, 'phone': user, 'password': password, 'submit': ''}
					headers = {'User_Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0','Referer':'https://fptplay.net/'}
					url_login = '******'
					url_logout = 'https://fptplay.net/user/logout'
					s = requests.Session()
					r = s.get('https://fptplay.net')
					r = s.post(url_login, headers=headers, data=params)
					headers = { 
								'Referer'			: url,
								'X-KEY'				: '123456',
								'X-Requested-With'	: 'XMLHttpRequest'
							}
					
					#Kiểm tra live tivi 
					match = re.search(r'\/livetv\/(.*)$', url)
					if match:
						channel_id = match.group(1)
						data = {
							'id' 	   : channel_id,
							'type'     : 'newchannel',
							'quality'  : 3,
							'mobile'   : 'web'
						}
						r = s.post('https://fptplay.net/show/getlinklivetv', headers=headers, data=data)
						
						video_url=json.loads(r.content)['stream']+'User-Agent=Mozilla/5.0 (compatible; MSIE 10.0; Trident/6.0; IEMobile/10.0; ARM; Touch; WINDOWS;MSI;MSI MSI-MS-7996;)'
						
						return video_url
						
				except Exception as e:
					pass
				
	#Xem phim k cần account vip
	else:
		user = ADDON.getSetting('fptplay_user')
		password = ADDON.getSetting('fptplay_pass')
		country_code = ADDON.getSetting('country_code')
		matches = re.search(r"(.+)\s", country_code)
		country_code = matches.group(1)
		url_login = '******'
		params = {'country_code': country_code, 'phone': user, 'password': password, 'submit': ''}
		headers = {'User_Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0','Referer':'https://fptplay.net/'}
		s = requests.Session()
		r = s.get('https://fptplay.net')
		r = s.post(url_login, headers=headers, data=params)
		headers = { 
					'Referer'			: 'https://fptplay.net',
					'X-Requested-With'	: 'XMLHttpRequest'
				}
		
		match = re.search(r'\-([\w]+)\.html', url)
		if not match:
			return
		movie_id = match.group(1)
		match = re.search(r'#tap-([\d]+)$', url)
		
		if match:
			episode_id = match.group(1)
		else:
			episode_id = 1

		data = {
			'id' 	   : movie_id,
			'type'     : 'newchannel',
			'quality'  : 3,
			'episode'  : episode_id,
			'mobile'   : 'web',
		}
		r = s.post('https://fptplay.net/show/getlink', headers=headers, data=data)
		json_data = json.loads(r.content)
		video_url=json.loads(r.content)['stream']+'User-Agent=Mozilla/5.0 (compatible; MSIE 10.0; Trident/6.0; IEMobile/10.0; ARM; Touch; WINDOWS;MSI;MSI MSI-MS-7996;)'
		return video_url
예제 #22
0
import traceback
import urllib
from addon import ADDON, ADDON_NAME, ADDON_VER
from logger import log
from config import cfg

sys.path.append(os.path.join(os.path.dirname(__file__), 'lib'))
from socketIO_client import SocketIO,LoggingNamespace

socketIO = None

while len(cfg.user_id) < 15:
    xbmc.executebuiltin('Notification(Alexa Service,Please enter a valid key into the alexa service)')
    for i in range(60):
        time.sleep(1)
    cfg.user_id = ADDON.getSetting('authcode')


def sendJSONRPC(method,params=None):
    out = {"id":1,"jsonrpc":"2.0","method":method}
    if params:
        out["params"] = params
    sendstring = json.dumps(out)
    log.info(sendstring)
    return json.loads(xbmc.executeJSONRPC(sendstring))


def play_generic_addon(message_attributes):
    addons = sendJSONRPC('Addons.GetAddons',{"enabled":true,"properties":["path","name"]})
    for video in cfg.video_addons:
        if message_attributes['addon'] in video.name:
예제 #23
0
from addon import ADDON, ADDON_NAME, ADDON_VER
from logger import log
from config import cfg

sys.path.append(os.path.join(os.path.dirname(__file__), 'lib'))
from socketIO_client import SocketIO, LoggingNamespace

socketIO = None

while len(cfg.user_id) < 15:
    xbmc.executebuiltin(
        'Notification(Alexa Service,Please enter a valid key into the alexa service)'
    )
    for i in range(60):
        time.sleep(1)
    cfg.user_id = ADDON.getSetting('authcode')


def sendJSONRPC(method, params=None):
    out = {"id": 1, "jsonrpc": "2.0", "method": method}
    if params:
        out["params"] = params
    sendstring = json.dumps(out)
    log.info(sendstring)
    return json.loads(xbmc.executeJSONRPC(sendstring))


def play_generic_addon(message_attributes):
    addons = sendJSONRPC('Addons.GetAddons', {
        "enabled": true,
        "properties": ["path", "name"]
예제 #24
0
def setup(force=False):
    is_setup = True if ADDON.getSetting('is_setup') == 'true' else False

    if is_setup and not force:
        return True

    dialog = xbmcgui.Dialog()

    username = dialog.input(utils.translate(30075),
                            type=xbmcgui.INPUT_ALPHANUM)
    if not username:
        return False

    # If 2-Factor Authentication is used
    is_two_factor = dialog.yesno(utils.translate(30071),
                                 utils.translate(30072))
    if is_two_factor:
        if not dialog.ok(utils.translate(30071), utils.translate(30073),
                         utils.translate(30074)):
            return False

    password = dialog.input(utils.translate(30076),
                            type=xbmcgui.INPUT_ALPHANUM,
                            option=xbmcgui.ALPHANUM_HIDE_INPUT)
    if not password:
        return False

    device_id = None
    if is_two_factor:
        # If Android Device available
        if dialog.yesno(utils.translate(30077), utils.translate(30078)):
            if not dialog.ok(utils.translate(30079), utils.translate(30081)):
                return False

            device_id = dialog.input(utils.translate(30084),
                                     type=xbmcgui.INPUT_ALPHANUM)
            if not device_id:
                return False
        else:
            # If using MAC-Address
            if dialog.yesno(utils.translate(30082), utils.translate(30083)):
                device_id = gmusicapi.Mobileclient.FROM_MAC_ADDRESS
            else:
                return False
    else:
        web = gmusicapi.Webclient()
        if not web.login(username, password):
            # If re-run setup due to login failed
            if dialog.yesno(utils.translate(30048), utils.translate(30085)):
                return setup(force=True)
            else:
                return False

        try:
            devices = web.get_registered_devices()
            if not devices:
                raise

            dev_list = []
            for dev in devices:
                # Not an Android Device so we skip as streaming would not work
                if dev['deviceType'] != 2:
                    continue

                if 'id' in dev and dev['id']:
                    dev_list.append('%s - %s' % (
                        dev.get('carrier', '').strip(' '),
                        dev.get('model', '').strip(' '),
                    ))
                    dev_list = sorted(dev_list)

            if len(dev_list) <= 0:
                raise

            elif len(dev_list) == 1:
                device_id = devices[0]['id'].lstrip('0x')

            else:
                selection = dialog.select(utils.translate(30042), dev_list, 0)

                if selection >= 0:
                    device_id = devices[selection]['id'].lstrip('0x')

                else:
                    return False

        except Exception:
            # If use MAC-Address instead due to no devices found
            if not dialog.yesno(utils.translate(30079),
                                utils.translate(30097)):
                return False

            device_id = gmusicapi.Mobileclient.FROM_MAC_ADDRESS

    # Test login
    mobile = gmusicapi.Mobileclient()
    if mobile.login(username, password, device_id):

        # Test if this is an all-access account
        if not mobile.get_all_stations():
            dialog.ok(utils.translate(30091), utils.translate(30092))
            return False

        ADDON.setSetting('username', username)
        ADDON.setSetting('password', password)
        ADDON.setSetting('authtoken', mobile.session._authtoken)

        if device_id == gmusicapi.Mobileclient.FROM_MAC_ADDRESS:
            mac_address = ''.join(re.findall('..', '%012x' % uuid.getnode()))
            ADDON.setSetting('device_id', mac_address)
        else:
            ADDON.setSetting('device_id', device_id)

        ADDON.setSetting('is_setup', 'true')

        utils.notify(utils.translate(30086), utils.translate(30087))

        return True

    else:
        # If re-run setup
        if dialog.yesno(utils.translate(30048), utils.translate(30085)):
            return setup(force=True)

        return False
예제 #25
0
import uuid
import SimpleDownloader as downloader
import remove_accents
import autorun
import datetime as dt, time
import xbmcvfs, shutil, zipfile


downloader = downloader.SimpleDownloader()

reload(sys);
sys.setdefaultencoding("utf8")

HANDLE = int(sys.argv[1])

CURRENT_PATH = ADDON.getAddonInfo("path")
PROFILE_PATH = xbmc.translatePath(ADDON_PROFILE).decode("utf-8")
VERSION = ADDON.getAddonInfo("version")
USER = ADDON.getSetting('user_id')
ADDON_NAME = ADDON.getAddonInfo("name")
USER_PIN_CODE = ADDON.getSetting('user_pin_code')
USER_VIP_CODE = ADDON.getSetting('user_vip_code')
LOCK_PIN = ADDON.getSetting('lock_pin')
VIEWMODE = ADDON.getSetting('view_mode')
DOWNLOAD_PATH = ADDON.getSetting("download_path")
CHECK = ADDON.getSetting("check")
DIALOG = xbmcgui.Dialog()
vDialog = xbmcgui.DialogProgress()
HOME = xbmc.translatePath('special://home/')
USERDATA = os.path.join(xbmc.translatePath('special://home/'), 'userdata')
ADDONDATA = os.path.join(USERDATA, 'addon_data', ADDON_ID)
예제 #26
0
import mapper

# Get all routes added to the mappers data store
from addon import routes  # noqa
from addon.gmusic_wrapper import GMusic

from addon import ADDON
from addon import URL

from addon.routes import actions

MPR = mapper.Mapper.get()
GMUSIC = GMusic.get(debug_logging=False)

if __name__ == '__main__':
    if ADDON.getSetting('is_setup') != 'true':
        actions.setup()

    GMUSIC.login()
    MPR.call(URL)
예제 #27
0
def get_fshare(url):
	login_url = 'https://www.fshare.vn/login'
	logout_url = 'https://www.fshare.vn/logout'
	download_url = 'https://www.fshare.vn/download/get'

	username = ADDON.getSetting('fshare_username')
	password = ADDON.getSetting('fshare_password')

	try:
		url_account = 'http://aku.vn/linksvip'
		headers = { 
			'Referer'			: 'http://aku.vn/linksvip',
			'User-Agent'		: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
		}
		response = fetch_data(url_account,headers=headers,data={ 'url_download' : url })
		link_match=re.search("<a href=http://download(.*?)\starget=_blank", response.body)
		if link_match:
			return 'http://download' + link_match.group(1)

	except Exception as e:
		pass

	if len(username) == 0  or len(password) == 0:
		try:
			url_account = VIETMEDIA_HOST + '?action=fshare_account'
			response = fetch_data(url_account)
			json_data = json.loads(response.body)
			username = json_data['username']
			password = json_data['password']
		except Exception as e:
			pass

	if len(username) == 0  or len(password) == 0:
		alert(u'Bạn chưa nhập tài khoản fshare'.encode("utf-8"))
		return
	
	response = fetch_data(login_url)
	if not response:
		return

	csrf_pattern = '\svalue="(.+?)".*name="fs_csrf"'

	csrf=re.search(csrf_pattern, response.body)
	fs_csrf = csrf.group(1)

	headers = { 
				'User-Agent' 	: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 VietMedia/1.0',
				'Cookie'		: response.cookiestring
            }
	
	data = {
			"LoginForm[email]"		: username,
			"LoginForm[password]"	: password,
			"fs_csrf"				: fs_csrf
		}

	response = fetch_data(login_url, headers, data)
	headers['Cookie'] = response.cookiestring
	headers['Referer'] = url
	direct_url = ''
	attempt = 1
	MAX_ATTEMPTS = 8
	file_id = os.path.basename(url)
	if response and response.status == 302:
		notify (u'Đăng nhập fshare thành công'.encode("utf-8"))
		while attempt < MAX_ATTEMPTS:
			if attempt > 1: sleep(2)
			notify (u'Lấy link lần thứ #%s'.encode("utf-8") % attempt)
			attempt += 1

			response = fetch_data(url, headers, data)

			if response.status == 200:
				csrf=re.search(csrf_pattern, response.body)
				fs_csrf = csrf.group(1)
				data = {
						'fs_csrf'					: fs_csrf,
						'ajax'						: 'download-form',
						'DownloadForm[linkcode]'	: file_id
					}
				
				response=fetch_data(download_url, headers, data);
				
				json_data = json.loads(response.body)
				
				if json_data.get('url'):
					direct_url = json_data['url']
					break
				elif json_data.get('msg'):
					notify(json_data['msg'].encode("utf-8"))
			elif response.status == 302:
				direct_url = response.headers['location']
				break
			else:
				notify (u'Lỗi khi lấy link, mã lỗi #%s. Đang thử lại...'.encode("utf-8") % response.status) 

		response = fetch_data(logout_url, headers)
		if response.status == 302:
			notify (u'Đăng xuất fshare thành công'.encode("utf-8"))
	else:
		notify (u'Đăng nhập không thành công, kiểm tra lại tài khoản'.encode("utf-8"))
	if len(direct_url) > 0:
		notify (u'Đã lấy được link'.encode("utf-8"))
	else:
		notify (u'Không được link, bạn vui lòng kiểm tra lại tài khoản'.encode("utf-8"))

	return direct_url