Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.23 KB | None | 0 0
  1. import telegram
  2. from telegram.error import NetworkError
  3. import requests
  4. from requests import ConnectionError
  5. from urllib3.exceptions import ResponseError
  6. from dotenv import load_dotenv
  7. from os import getenv
  8. import os
  9.  
  10.  
  11. V = 5.92
  12.  
  13.  
  14. class VkAPIUnavailable(Exception):
  15.     pass
  16.  
  17.  
  18. class FaceBookAPIUnavailable(Exception):
  19.     pass
  20.  
  21.  
  22. class OSException(Exception):
  23.     pass
  24.  
  25.  
  26. def open_img_to_upload(path_to_img):
  27.     try:
  28.         image_file_descriptor = open(path_to_img, 'rb')
  29.     except (OSError, PermissionError, FileNotFoundError):
  30.         raise OSException("Failed to open image file - {} !\n"
  31.                           "Possible reasons:\n"
  32.                           "-Permission error\n"
  33.                           "-File doesn't exist\n"
  34.                           "-File descriptor is open".format(path_to_img))
  35.     img_obj_for_vk = {'photo': image_file_descriptor}
  36.     return img_obj_for_vk
  37.  
  38.  
  39. def upload_photo_to_vk(url, files):
  40.     try:
  41.         response = requests.post(url, files=files)
  42.         if not response.ok:
  43.             raise ResponseError
  44.     except (ConnectionError, ResponseError):
  45.         raise VkAPIUnavailable("{} is not available!".format(url))
  46.     content = response.json()
  47.     try:
  48.         photo = content['photo']
  49.         server = content['server']
  50.         hash = content['hash']
  51.         if not all([photo, server, hash]):
  52.             raise KeyError
  53.         return photo, server, hash
  54.     except KeyError:
  55.         raise VkAPIUnavailable("Something went wrong"
  56.                                " during uploading photo to vk!\n"
  57.                                "API-method - {}".format(url))
  58.  
  59.  
  60. def save_img_to_vk(access_token, photo, group_id, server, img_hash):
  61.     payload = {
  62.         "access_token": access_token,
  63.         "group_id": group_id,
  64.         "photo": photo,
  65.         "server": server,
  66.         "hash": img_hash,
  67.         "v": V
  68.     }
  69.     url = "https://api.vk.com/method/photos.saveWallPhoto"
  70.     try:
  71.         response = requests.post(url, params=payload)
  72.         if not response.ok:
  73.             raise ResponseError
  74.     except (ConnectionError, ResponseError):
  75.         raise VkAPIUnavailable("{} is not available!".format(url))
  76.     try:
  77.         content = response.json()['response'][0]
  78.         media_id = content['id']
  79.         owner_id = content['owner_id']
  80.         return media_id, owner_id
  81.     except KeyError:
  82.         print(type(response.text))
  83.         error_code = response.text['error']['error_code']
  84.         error_msg = response.text['error']['error_msg']
  85.         raise VkAPIUnavailable("Something went wrong"
  86.                                " during saving photo to vk!\n"
  87.                                "API-method - {}\n"
  88.                                "error_code - {}\n"
  89.                                "error_msg - {}".format(url,
  90.                                                        error_code,
  91.                                                        error_msg
  92.                                                        ))
  93.  
  94.  
  95. def get_vk_upload_adress(vk_group_id, access_token):
  96.     payload = {
  97.         "access_token": access_token,
  98.         "scope": "photos",
  99.         "group_id": vk_group_id,
  100.         "v": V
  101.     }
  102.     url = "https://api.vk.com/method/photos.getWallUploadServer"
  103.     try:
  104.         response = requests.get(url, params=payload)
  105.         if not response.ok:
  106.             raise ResponseError
  107.     except (ConnectionError, ResponseError):
  108.         raise VkAPIUnavailable("{} is not available!".format(url))
  109.     content = response.json()
  110.     try:
  111.         upload_url = content['response']['upload_url']
  112.     except KeyError:
  113.         error_code = content['error']['error_code']
  114.         error_msg = content['error']['error_msg']
  115.         raise VkAPIUnavailable("Something went wrong"
  116.                                " during getting vk-upload_url !\n"
  117.                                "API-method - {}\n"
  118.                                "error_code - {}\n"
  119.                                "error_msg - {}".format(url,
  120.                                                        error_code,
  121.                                                        error_msg
  122.                                                        ))
  123.     return upload_url
  124.  
  125.  
  126. def post_photo_to_vk_wall(
  127.         group_id,
  128.         owner_id,
  129.         media_id,
  130.         message,
  131.         access_token
  132. ):
  133.     payload = {
  134.         "owner_id": "-{}".format(group_id),
  135.         "message": message,
  136.         "attachments": "photo{}_{}".format(owner_id, media_id),
  137.         "from_group": 1,
  138.         "v": V,
  139.         "access_token": access_token
  140.  
  141.     }
  142.     url = "https://api.vk.com/method/wall.post"
  143.     try:
  144.         response = requests.post(url, params=payload)
  145.         if not response.ok:
  146.             raise ResponseError
  147.     except (ConnectionError, ResponseError):
  148.         raise VkAPIUnavailable("{} is not available!".format(url))
  149.     content = response.json()
  150.     try:
  151.         post_id = content["response"]["post_id"]
  152.     except KeyError:
  153.         error_code = content['error']['error_code']
  154.         error_msg = content['error']['error_msg']
  155.         raise VkAPIUnavailable("Something went wrong"
  156.                                " during posting to vk-wall!\n"
  157.                                "API-method - {}\n"
  158.                                "error_code - {}\n"
  159.                                "error_msg - {}".format(url,
  160.                                                        error_code,
  161.                                                        error_msg
  162.                                                        ))
  163.     return post_id
  164.  
  165.  
  166. def post_to_telegram(photo, text, chat_id, token):
  167.     os.environ['HTTPS_PROXY'] = "https://76.87.197.15:80"
  168.     os.environ['HTTP_PROXY'] = "https://76.87.197.15:80"# http://spys.one/proxys/US/
  169.     bot = telegram.Bot(token=token)
  170.     bot.send_message(chat_id=chat_id, text=text)
  171.     bot.send_photo(chat_id=chat_id, photo=photo)
  172.     return True
  173.  
  174.  
  175. def post_to_facebook(
  176.         access_token,
  177.         group_id,
  178.         photo,
  179.         message
  180. ):
  181.     dest_url = "{}/{}/photos".format("https://graph.facebook.com", group_id)
  182.     payload = {
  183.         'access_token': access_token,
  184.         'message': message,
  185.         'published': True,
  186.      }
  187.     files = {'source': photo}
  188.     # files = {'source': open('test_img.jpg', 'rb')}
  189.     try:
  190.         response = requests.post(dest_url, params=payload, files=files)
  191.         if not response.ok:
  192.             raise FaceBookAPIUnavailable(response.text)
  193.         return True
  194.     except (ConnectionError, ResponseError):
  195.         raise FaceBookAPIUnavailable("{} is not available!".format(dest_url))
  196.  
  197.  
  198. if __name__ == '__main__':
  199.     load_dotenv()
  200.     vk_access_token = getenv("vk_access_token")
  201.     vk_group_id = getenv("vk_group_id")
  202.     bot_token = getenv("telegram_bot_token")
  203.     chat_id = getenv("telegram_channel_name")
  204.     facebook_access_token = getenv("facebook_token")
  205.     facebook_group_id = getenv("facebook_group")
  206.     message = 'aaaaaaa!!!!!'
  207.     try:
  208.         img_obj_for_vk = open_img_to_upload('test_img.jpg')
  209.     except OSException as error:
  210.         exit(error)
  211.     try:
  212.         upload_url = get_vk_upload_adress(
  213.             vk_group_id,
  214.             vk_access_token
  215.         )
  216.         uploaded_photo, server, img_hash = upload_photo_to_vk(
  217.             upload_url,
  218.             img_obj_for_vk
  219.         )
  220.         media_id, owner_id = save_img_to_vk(
  221.             vk_access_token,
  222.             uploaded_photo,
  223.             vk_group_id,
  224.             server,
  225.             img_hash
  226.         )
  227.         post_to_vk = post_photo_to_vk_wall(
  228.             vk_group_id,
  229.             owner_id,
  230.             media_id,
  231.             message,
  232.             vk_access_token
  233.         )
  234.     except (VkAPIUnavailable) as error:
  235.         print(error)
  236.     try:
  237.         post_to_facebook = post_to_facebook(
  238.             facebook_access_token,
  239.             facebook_group_id,
  240.             img_obj_for_vk['photo'],
  241.             message
  242.         )
  243.     except FaceBookAPIUnavailable as error:
  244.         print(error)
  245.     try:
  246.         telegram_posted = post_to_telegram(
  247.             img_obj_for_vk['photo'],
  248.             message,
  249.             chat_id,
  250.             bot_token
  251.         )
  252.     except NetworkError as error:
  253.         print(error)
  254.     img_obj_for_vk['photo'].close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement