def get_globoplay_broadcasts(media_id, latitude, longitude): variables = urllib.quote_plus( '{{"mediaId":"{media_id}","coordinates":{"lat":"{lat}", "long": "{long}"}}}' .format(media_id=media_id, lat=latitude, long=longitude)) query = 'query%20Epg%28%24mediaId%3A%20ID%21%2C%20%24coordinates%3A%20CoordinatesData%29%20%7B%0A%20%20broadcast%28mediaId%3A%20%24mediaId%2C%20coordinates%3A%20%24coordinates%29%20%7B%0A%20%20%20%20...broadcastFragment%0A%20%20%7D%0A%7D%0Afragment%20broadcastFragment%20on%20Broadcast%20%7B%0A%20%20%20%20%20%20mediaId%0A%20%20%20%20%20%20transmissionId%0A%20%20%20%20%20%20logo%0A%20%20%20%20%20%20imageOnAir%28scale%3A%20X1080%29%0A%20%20%20%20%20%20withoutDVRMediaId%0A%20%20%20%20%20%20promotionalMediaId%0A%20%20%20%20%20%20salesPageCallToAction%0A%20%20%20%20%20%20promotionalText%0A%20%20%20%20%20%20geofencing%0A%20%20%20%20%20%20geoblocked%0A%20%20%20%20%20%20ignoreAdvertisements%0A%20%20%20%20%20%20channel%20%7B%0A%20%20%20%20%20%20%20%20id%0A%20%20%20%20%20%20%20%20color%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20logo%28format%3A%20PNG%29%0A%20%20%20%20%20%20%20%20requireUserTeam%0A%20%20%20%20%20%20%20%20payTvServiceId%0A%20%20%20%20%20%20%20%20payTvUsersMessage%0A%20%20%20%20%20%20%20%20payTvExternalLink%0A%20%20%20%20%20%20%20%20payTvExternalLinkLabel%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20affiliateSignal%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%20%20dtvChannel%0A%20%20%20%20%20%20dtvHDID%0A%20%20%20%20%20%20dtvID%0A%20%20%20%20%7D%0A%20%20%20%20%20%20epgCurrentSlots%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20metadata%0A%20%20%20%20%20%20%20%20description%0A%20%20%20%20%20%20%20%20tags%0A%20%20%20%20%20%20%20%20startTime%0A%20%20%20%20%20%20%20%20endTime%0A%20%20%20%20%20%20%20%20durationInMinutes%0A%20%20%20%20%20%20%20%20liveBroadcast%0A%20%20%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20%20%20contentRating%0A%20%20%20%20%20%20%20%20title%7B%0A%20%20%20%20%20%20%20%20%20%20poster%7B%0A%20%20%20%20%20%20%20%20%20%20web%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20cover%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20landscape%0A%20%20%20%20%20%20%20%20%20%20%20%20portrait%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20releaseYear%0A%20%20%20%20%20%20%20%20%20%20type%0A%20%20%20%20%20%20%20%20%20%20format%0A%20%20%20%20%20%20%20%20%20%20countries%0A%20%20%20%20%20%20%20%20%20%20directors%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20cast%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20genres%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20media%20%7B%0A%20%20%20%20%20%20%20%20serviceId%0A%20%20%20%20%20%20%20%20headline%0A%20%20%20%20%20%20%20%20thumb%28size%3A%20720%29%0A%20%20%20%20%20%20%20%20availableFor%0A%20%20%20%20%20%20%20%20title%20%7B%0A%20%20%20%20%20%20%20%20%20%20slug%0A%20%20%20%20%20%20%20%20%20%20headline%0A%20%20%20%20%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20subscriptionService%20%7B%0A%20%20%20%20%20%20%20%20%20%20faq%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20url%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20salesPage%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20identifier%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D' response = request_query(query, variables) broadcasts = (response.get('data', {}) or {}).get('broadcasts', []) or [] utc_now = int(control.to_timestamp(datetime.datetime.utcnow())) result = [] for broadcast in broadcasts: media_id = str(broadcast.get('mediaId', 0)) epg = next((epg for epg in broadcast['epgByDate']['entries'] if int(epg['startTime']) <= utc_now < int(epg['endTime'])), {}) control.log('EPG: %s' % epg) channel = broadcast.get('channel', {}) or {} logo = channel.get('logo') channel_name = channel.get('name', '').replace( 'TV Globo', 'Globo') # broadcast.get('media', {}).get('headline', '') fanart = broadcast.get('imageOnAir') channel_id = channel.get('id', 0) service_id = broadcast.get('media', {}).get('serviceId', 0) duration = epg.get('durationInMinutes', 0) * 60 title_obj = epg.get('title', {}) or {} title = epg.get('name', '') description = title_obj.get('description') or epg.get( 'description', '') fanart = (title_obj.get('cover', {}) or {}).get('landscape', fanart) or fanart poster = (title_obj.get('poster', {}) or {}).get('web') label = '[B]' + channel_name + '[/B]' + ('[I] - ' + title + '[/I]' if title else '') program_datetime = datetime.datetime.utcfromtimestamp( epg.get('startTime', 0)) + util.get_utc_delta() next_start = datetime.datetime.utcfromtimestamp(epg.get( 'endTime', 0)) + util.get_utc_delta() plotoutline = datetime.datetime.strftime( program_datetime, '%H:%M') + ' - ' + datetime.datetime.strftime( next_start, '%H:%M') if not description or len(description) < 3: description = '%s | %s' % (title, plotoutline) if title else plotoutline result.append({ 'handler': PLAYER_HANDLER, 'method': 'play_stream', 'IsPlayable': True, 'id': media_id, 'channel_id': channel_id, 'service_id': service_id, 'live': epg.get('liveBroadcast', False) or False, 'livefeed': True, 'label': label, 'title': label, # 'title': title, 'tvshowtitle': title, 'plot': description, # 'plotoutline': plotoutline, "tagline": plotoutline, 'duration': duration, "dateadded": datetime.datetime.strftime(program_datetime, '%Y-%m-%d %H:%M:%S'), 'sorttitle': title, 'studio': 'Globoplay', 'year': title_obj.get('releaseYear'), 'country': title_obj.get('countries', []) or [], 'genre': title_obj.get('genresNames', []) or [], 'cast': title_obj.get('castNames', []) or [], 'director': title_obj.get('directorsNames', []) or [], 'writer': title_obj.get('screenwritersNames', []) or [], 'credits': title_obj.get('artDirectorsNames', []) or [], 'mpaa': epg.get('contentRating'), "art": { 'icon': logo, 'clearlogo': logo, 'thumb': fanart, 'fanart': fanart, 'tvshow.poster': poster } }) return result
def get_globo_americas(): is_globosat_available = control.is_globosat_available() headers = { "Accept-Encoding": "gzip", "User-Agent": "Globo Play/0 (iPhone)", "x-tenant-id": "globo-play-us", 'x-platform-id': 'web', 'x-device-id': 'desktop', 'x-client-version': '0.4.3' } now = datetime.datetime.utcnow() + datetime.timedelta( hours=control.get_current_brasilia_utc_offset()) date = now.strftime('%Y-%m-%d') variables = urllib.quote_plus('{{"date":"{}"}}'.format(date)) query = 'query%20getEpgBroadcastList%28%24date%3A%20Date%21%29%20%7B%0A%20%20broadcasts%20%7B%0A%20%20%20%20...broadcastFragment%0A%20%20%7D%0A%7D%0Afragment%20broadcastFragment%20on%20Broadcast%20%7B%0A%20%20mediaId%0A%20%20media%20%7B%0A%20%20%20%20serviceId%0A%20%20%20%20headline%0A%20%20%20%20thumb%28size%3A%20720%29%0A%20%20%20%20availableFor%0A%20%20%20%20title%20%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20headline%0A%20%20%20%20%20%20titleId%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20imageOnAir%28scale%3A%20X1080%29%0A%20%20transmissionId%0A%20%20geofencing%0A%20%20geoblocked%0A%20%20channel%20%7B%0A%20%20%20%20id%0A%20%20%20%20color%0A%20%20%20%20name%0A%20%20%20%20logo%28format%3A%20PNG%29%0A%20%20%7D%0A%20%20epgByDate%28date%3A%20%24date%29%20%7B%0A%20%20%20%20entries%20%7B%0A%20%20%20%20%20%20name%0A%20%20%20%20%20%20metadata%0A%20%20%20%20%20%20description%0A%20%20%20%20%20%20startTime%0A%20%20%20%20%20%20endTime%0A%20%20%20%20%20%20durationInMinutes%0A%20%20%20%20%20%20liveBroadcast%0A%20%20%20%20%20%20tags%0A%20%20%20%20%20%20contentRating%0A%20%20%20%20%20%20contentRatingCriteria%0A%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20alternativeTime%0A%20%20%20%20%20%20title%7B%0A%20%20%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20%20%20originProgramId%0A%20%20%20%20%20%20%20%20releaseYear%0A%20%20%20%20%20%20%20%20countries%0A%20%20%20%20%20%20%20%20directorsNames%0A%20%20%20%20%20%20%20%20castNames%0A%20%20%20%20%20%20%20%20genresNames%0A%20%20%20%20%20%20%20%20authorsNames%0A%20%20%20%20%20%20%20%20screenwritersNames%0A%20%20%20%20%20%20%20%20artDirectorsNames%0A%20%20%20%20%20%20%20%20cover%20%7B%0A%20%20%20%20%20%20%20%20%20%20landscape%28scale%3A%20X1080%29%0A%20%20%20%20%20%20%20%20%20%20portrait%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20poster%7B%0A%20%20%20%20%20%20%20%20%20%20web%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20logo%20%7B%0A%20%20%20%20%20%20%20%20%20%20web%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D' url = 'https://jarvis.globo.com/graphql?query={query}&variables={variables}'.format( query=query, variables=variables) control.log('GLOBOPLAY US - GET %s' % url) response = cache.get(requests.get, 24, url, headers=headers, table='globoplay').json() control.log(response) broadcasts = response['data']['broadcasts'] utc_now = int(control.to_timestamp(datetime.datetime.utcnow())) # thumb_usa = 'https://live-thumbs.video.globo.com/glbeua/snapshot/' + str(int(time.time())) result = [] for broadcast in broadcasts: media_id = str(broadcast.get('mediaId', 0)) if is_globosat_available and media_id != str( GLOBO_US_LIVE_SUBSCRIBER_MEDIA_ID): continue epg = next((epg for epg in broadcast['epgByDate']['entries'] if int(epg['startTime']) <= utc_now < int(epg['endTime'])), {}) control.log('EPG: %s' % epg) channel = broadcast.get('channel', {}) or {} logo = channel.get('logo') channel_name = channel.get('name', '').replace( 'TV Globo', 'Globo') + ' USA' # broadcast.get('media', {}).get('headline', '') fanart = broadcast.get('imageOnAir') channel_id = channel.get('id', 0) service_id = broadcast.get('media', {}).get('serviceId', 0) # channel_slug = '%s-americas' % channel.get('name', '').lower().replace(' ', '') duration = epg.get('durationInMinutes', 0) * 60 title_obj = epg.get('title', {}) or {} title = epg.get('name', '') description = title_obj.get('description') or epg.get( 'description', '') fanart = (title_obj.get('cover', {}) or {}).get('landscape', fanart) or fanart poster = (title_obj.get('poster', {}) or {}).get('web') label = '[B]' + channel_name + '[/B]' + ('[I] - ' + title + '[/I]' if title else '') program_datetime = datetime.datetime.utcfromtimestamp( epg.get('startTime', 0)) + util.get_utc_delta() next_start = datetime.datetime.utcfromtimestamp(epg.get( 'endTime', 0)) + util.get_utc_delta() plotoutline = datetime.datetime.strftime( program_datetime, '%H:%M') + ' - ' + datetime.datetime.strftime( next_start, '%H:%M') description = '%s | %s' % (plotoutline, description) tags = [plotoutline] if epg.get('liveBroadcast', False): tags.append(control.lang(32004)) tags.extend(epg.get('tags', []) or []) result.append({ 'handler': PLAYER_HANDLER, 'method': 'play_stream', 'IsPlayable': True, 'id': media_id, 'channel_id': channel_id, 'service_id': service_id, 'live': epg.get('liveBroadcast', False) or False, 'livefeed': True, 'label': label, 'title': label, # 'title': title, 'tvshowtitle': title, 'plot': description, # 'plotoutline': plotoutline, # "tagline": plotoutline, 'tag': tags, 'duration': duration, "dateadded": datetime.datetime.strftime(program_datetime, '%Y-%m-%d %H:%M:%S'), 'sorttitle': title, 'studio': 'Globoplay Americas', 'year': title_obj.get('releaseYear'), 'country': title_obj.get('countries', []) or [], 'genre': title_obj.get('genresNames', []) or [], 'cast': title_obj.get('castNames', []) or [], 'director': title_obj.get('directorsNames', []) or [], 'writer': title_obj.get('screenwritersNames', []) or [], 'credits': title_obj.get('artDirectorsNames', []) or [], 'mpaa': epg.get('contentRating'), "art": { 'icon': logo, 'clearlogo': logo, 'thumb': fanart, 'fanart': fanart, 'tvshow.poster': poster } }) return result
def get_globo_americas(): GLOBO_AMERICAS_ID = 7832875 is_globosat_available = control.is_globosat_available() headers = { "Accept-Encoding": "gzip", "User-Agent": "Globo Play/0 (iPhone)", "x-tenant-id": "globo-play-us" } now = datetime.datetime.now() date = now.strftime('%Y-%m-%d') variables = urllib.quote_plus('{{"date":"{}"}}'.format(date)) query = 'query%20getEpgBroadcastList%28%24date%3A%20Date%21%29%20%7B%0A%20%20broadcasts%20%7B%0A%20%20%20%20...broadcastFragment%0A%20%20%7D%0A%7D%0Afragment%20broadcastFragment%20on%20Broadcast%20%7B%0A%20%20mediaId%0A%20%20media%20%7B%0A%20%20%20%20serviceId%0A%20%20%20%20headline%0A%20%20%20%20thumb%28size%3A%20720%29%0A%20%20%20%20availableFor%0A%20%20%20%20title%20%7B%0A%20%20%20%20%20%20slug%0A%20%20%20%20%20%20headline%0A%20%20%20%20%20%20titleId%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20imageOnAir%28scale%3A%20X1080%29%0A%20%20transmissionId%0A%20%20geofencing%0A%20%20geoblocked%0A%20%20channel%20%7B%0A%20%20%20%20id%0A%20%20%20%20color%0A%20%20%20%20name%0A%20%20%20%20logo%28format%3A%20PNG%29%0A%20%20%7D%0A%20%20epgByDate%28date%3A%20%24date%29%20%7B%0A%20%20%20%20entries%20%7B%0A%20%20%20%20%20%20name%0A%20%20%20%20%20%20metadata%0A%20%20%20%20%20%20description%0A%20%20%20%20%20%20startTime%0A%20%20%20%20%20%20endTime%0A%20%20%20%20%20%20durationInMinutes%0A%20%20%20%20%20%20liveBroadcast%0A%20%20%20%20%20%20tags%0A%20%20%20%20%20%20contentRating%0A%20%20%20%20%20%20contentRatingCriteria%0A%20%20%20%20%20%20titleId%0A%20%20%20%20%20%20alternativeTime%0A%20%20%20%20%20%20title%7B%0A%20%20%20%20%20%20%20%20description%0A%20%20%20%20%20%20%20%20poster%7B%0A%20%20%20%20%20%20%20%20%20%20web%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20cover%20%7B%0A%20%20%20%20%20%20%20%20%20%20landscape%0A%20%20%20%20%20%20%20%20%20%20portrait%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20logo%20%7B%0A%20%20%20%20%20%20%20%20%20%20web%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20releaseYear%0A%20%20%20%20%20%20%20%20type%0A%20%20%20%20%20%20%20%20format%0A%20%20%20%20%20%20%20%20countries%0A%20%20%20%20%20%20%20%20directors%20%7B%0A%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20cast%20%7B%0A%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20genres%20%7B%0A%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D' url = 'https://jarvis.globo.com/graphql?query={query}&variables={variables}'.format( query=query, variables=variables) response = client.request(url, headers=headers) broadcasts = response['data']['broadcasts'] items = [] utc_now = control.to_timestamp(datetime.datetime.now()) for broadcast in broadcasts: media_id = str(broadcast.get('mediaId', 0)) if is_globosat_available and media_id != str(GLOBO_AMERICAS_ID): continue epg = next((epg for epg in broadcast['epgByDate']['entries'] if epg['startTime'] <= utc_now < epg['endTime']), {}) channel = broadcast.get('channel', {}) or {} logo = channel.get('logo', None) channel_name = broadcast.get('media', {}).get('headline', '') fanart = broadcast.get('imageOnAir', None) channel_id = channel.get('id', 0) service_id = broadcast.get('media', {}).get('serviceId', 0) channel_slug = '%s-americas' % channel.get('name', '').lower().replace( ' ', '') duration = epg.get('durationInMinutes', 0) * 60 title_obj = epg.get('title', {}) or {} title = epg.get('name', '') description = title_obj.get('description', None) or epg.get( 'description', '') fanart = title_obj.get('cover', {}).get('landscape', fanart) or fanart year = title_obj.get('releaseYear', None) country = [ c.get('name') for c in title_obj.get('countries', []) or [] if 'name' in c and c['name'] ] genres = [ c.get('name') for c in title_obj.get('genres', []) or [] if 'name' in c and c['name'] ] cast = [ c.get('name') for c in title_obj.get('cast', []) or [] if 'name' in c and c['name'] ] director = [ c.get('name') for c in title_obj.get('directors', []) or [] if 'name' in c and c['name'] ] rating = epg.get('contentRating', '') name = ('[B]' if not control.isFTV else '') + channel_name + ( '[/B]' if not control.isFTV else '') + ('[I] - ' + title + '[/I]' if title else '') program_datetime = datetime.datetime.utcfromtimestamp( epg.get('startTime', 0)) + util.get_utc_delta() next_start = datetime.datetime.utcfromtimestamp(epg.get( 'endTime', 0)) + util.get_utc_delta() plotoutline = datetime.datetime.strftime( program_datetime, '%H:%M') + ' - ' + datetime.datetime.strftime( next_start, '%H:%M') if not description or len(description) < 3: description = '%s | %s' % (title, plotoutline) if title else plotoutline item = { 'name': name, 'title': title, 'tvshowtitle': title, 'plot': description, 'plotoutline': plotoutline, "tagline": description, 'duration': duration, "dateadded": datetime.datetime.strftime(program_datetime, '%Y-%m-%d %H:%M:%S'), 'brplayprovider': 'globoplay', 'logo': logo, 'clearlogo': logo, 'thumb': fanart, 'poster': None, 'fanart': fanart, 'slug': channel_slug, 'sorttitle': channel_name, 'studio': channel_name, 'playable': 'true', 'id': media_id, 'channel_id': channel_id, 'service_id': service_id, 'live': epg.get('liveBroadcast', False) or False, 'year': year, 'country': country, 'genre': genres, 'cast': cast, 'director': director, 'mpaa': rating, 'livefeed': 'false', # force vod player for us channels "mediatype": 'video' # "video", "movie", "tvshow", "season", "episode" or "musicvideo" } items.append(item) return items