def start_poll(self): last = 0 while True: r = bot_util.urlopen(self._url_get_updates + "?offset=%s" % (last + 1)) if r: try: r = json.loads(r) except ValueError as e: print "Error while polling (json.loads):", e continue if 'result' in r: for update in r['result']: if len(update) > 0: print update if 'message' in update: message = update['message'] if 'date' in message: date = message['date'] if self._previous_update_date >= int(date): continue if 'update_id' in update: last = int(update["update_id"]) self._process_update(update) previous_update_date = int(date) self._write_previous_update_date( previous_update_date) time.sleep(3)
def get_user_info(_user_id): u = build_users_get_url(_user_id) response_text = bot_util.urlopen(u) if response_text: response_json = json.loads(response_text) if 'response' in response_json: response = response_json['response'] if len(response) == 0: return None _user_info = response[0] first_name = "" last_name = "" city = "" if "first_name" in _user_info: first_name = _user_info["first_name"] if "last_name" in _user_info: last_name = _user_info["last_name"] if "city" in _user_info: if "title" in _user_info["city"]: city = _user_info["city"]["title"] _user_info = { 'first_name': first_name, 'last_name': last_name, 'city': city } return _user_info return None
def get_weather(): page = bot_util.urlopen(_URL_WEATHER) if not page: return None temperature = None pressure = None rain = None wind = None weather = "" try: j = json.loads(page) if 'outsideTemp' in j: temperature = j['outsideTemp'] if 'barometer' in j: pressure = j['barometer'] if 'rain' in j: rain = j['rain'] if 'windDirectionDegrees' in j and 'windSpeed' in j and 'windBeaufortScale': wind = (j['windDirectionDegrees'], j['windSpeed'], j['windBeaufortScale']) except Exception as e: print e if temperature is not None: weather += build_temperature_string(temperature) if pressure is not None: weather += build_pressure_string(pressure) if rain is not None: weather += build_rain_string(rain) if wind is not None: wind = build_wind_string(wind[0], wind[1], wind[2]) if wind is not None: weather += wind return weather
def get_forecast(): p = bot_util.urlopen(YandexForecaster._URL_FORECAST_YANDEX) if not p: return False root = ET.fromstring(p) if root is None: return False NUMBER_OF_DAYS = 2 days_list = [] i = 0 for child in root: if child.tag == YandexForecaster._build_tag_name("day"): days_list.append(child) i += 1 if i == NUMBER_OF_DAYS: break if len(days_list) != 2: return False today = days_list[0] tomorrow = days_list[1] today_forecast = YandexForecaster._get_day_forecast_string(today) tomorrow_forecast = YandexForecaster._get_day_forecast_string(tomorrow) if not today_forecast or not tomorrow_forecast: return False forecast = u"*Сегодня:*\n" + today_forecast + u"\n*Завтра*:\n" + tomorrow_forecast return forecast
def send_response(self, chat_id, response, markdown=False): if response is None or chat_id is None or response == "": return False if isinstance(response, unicode): response = response.encode("utf-8") d = {"chat_id": chat_id, "text": response} if markdown is True: d["parse_mode"] = "Markdown" return bot_util.urlopen(self._url_send_message, data=d)
def get_rain(): page = bot_util.urlopen(_URL_WEATHER) if not page: return None try: j = json.loads(page) if 'rain' in j: return j['rain'] except Exception as e: print e return None
def get_temperature(): page = bot_util.urlopen(_URL_WEATHER) if not page: return None try: j = json.loads(page) if 'outsideTemp' in j: return j['outsideTemp'] except Exception as e: print e return None
def get_pressure(): page = bot_util.urlopen(_URL_WEATHER) if not page: return None try: j = json.loads(page) if 'barometer' in j: return j['barometer'] except Exception as e: print e return None
def send_response(self, chat_id, response, markdown=False): if response is None or chat_id is None or response == '': return False if isinstance(response, unicode): response = response.encode('utf-8') d = { 'chat_id': chat_id, 'text': response, } if markdown is True: d['parse_mode'] = "Markdown" return bot_util.urlopen(self._url_send_message, data=d)
def get_weather(): page = bot_util.urlopen(_URL_WEATHER) if not page: return None temperature = _get_temperature_from_page(page) humidity = _get_humidity_from_page(page) pressure = _get_pressure_from_page(page) wind = _get_wind_from_page(page) weather = "" if temperature is not None: weather += build_temperature_string(temperature) if humidity is not None: weather += build_humidity_string(humidity) if pressure is not None: weather += build_pressure_string(pressure) if wind is not None: weather += build_wind_string(wind) return weather
def start_poll(self): last = 0 while True: r = bot_util.urlopen(self._url_get_updates + "?offset=%s" % (last + 1)) if r: try: r = json.loads(r) except ValueError as e: print "Error while polling (json.loads):", e continue # print r["result"] for update in r["result"]: if len(update) > 0: print update if self._previous_update_date >= int(update["message"]["date"]): continue last = int(update["update_id"]) self._process_update(update) previous_update_date = int(update["message"]["date"]) self._write_previous_update_date(previous_update_date) time.sleep(3)
def get_forecast(self): forecast = bot_util.urlopen(self._url_get_forecast) if forecast: forecast = json.loads(forecast) if "forecast" in forecast: forecast = forecast["forecast"] if "simpleforecast" in forecast: simple_forecast = forecast["simpleforecast"] if "forecastday" in simple_forecast: forecastday = simple_forecast["forecastday"] if len(forecastday) >= 4: forecast = u"" forecast_today = forecastday[0] forecast_today = self._get_day_forecast(forecast_today) forecast += u"*Today:*\n" + forecast_today forecast_tomorrow = forecastday[1] forecast_tomorrow = self._get_day_forecast(forecast_tomorrow) forecast += u"\n*Tomorrow:*\n" + forecast_tomorrow return forecast return False
def build_message(_hashtag): url = get_newsfeed_search_hashtag_url(_hashtag) response_text = bot_util.urlopen(url) if not response_text: print "Failed to get data from VK" return None response_json = json.loads(response_text) if 'response' not in response_json: print "No 'response' in response" print response_json return None response = response_json['response'] if 'items' not in response: print "No 'items' in 'response'" return None items = response['items'] if len(items) == 0: print "Length of 'items' is zero" return None last_item = items[0] if 'owner_id' not in last_item and 'id' not in last_item: print "No 'owner_id' and 'id' in item" return None if last_item['owner_id'] in _BANNED: return None print last_item['owner_id'] print last_item last_item_url = build_wall_url(last_item['owner_id'], last_item['id']) last_item_filename = _LAST_ITEM_FILENAME + "_" + _hashtag last_item_in_file = bot_util.read_one_string_file(last_item_filename) if not last_item_in_file or last_item_url != last_item_in_file: bot_util.write_one_string_file(last_item_filename, last_item_url) print "New post: " + last_item_url print last_item message = "" if 'attachments' in last_item: attachments = last_item['attachments'] photo_url = None for attachment in attachments: if 'photo' in attachment: photo = attachment['photo'] if 'photo_1280' in photo: photo_url = photo['photo_1280'] break if photo_url: print photo_url message += photo_url + "\n\n" owner_id = last_item['owner_id'] if 'text' in last_item: text = last_item['text'] message += text + "\n\n" if not bot_util.check_file_for_string(_ALL_POSTS_FILENAME, last_item_url + "\n"): return None else: bot_util.append_string_to_file(_ALL_POSTS_FILENAME, last_item_url + "\n") message += u"<b>Пост:</b> " + last_item_url + "\n" if owner_id > 0: user_info = get_user_info(owner_id) first_name = user_info['first_name'] last_name = user_info['last_name'] message += u"<b>Автор:</b> <a href=\"https://vk.com/id" + str( owner_id) + u"\">" + first_name + u" " + last_name + u"</a>" else: message += u"<b>Автор:</b> https://vk.com/club" + str(-owner_id) return message else: print "There is no new posts for #" + _hashtag return None
def get_wind(): page = bot_util.urlopen(_URL_WEATHER) if not page: return None return _get_wind_from_page(page)
def get_pressure(): page = bot_util.urlopen(_URL_WEATHER) if not page: return None return _get_pressure_from_page(page)
def get_humidity(): page = bot_util.urlopen(_URL_WEATHER) if not page: return None return _get_humidity_from_page(page)