
この出版物では、Instagramからの写真へのリンクを受け入れ、この写真を送り返すVKontakteボットを作成します。
  Vkontakteでグループを作成し、コミュニティ設定にメッセージを含めます: 
      
        
        
        
      
      コミュニティ管理-メッセージ。 
まず、「エコーボット」を作成してみましょう。
動作するには、次のライブラリが必要です。
falcon==1.2.0 gunicorn==19.7.1 py-vkontakte==5.53.4 requests==2.18.3
コミュニティを代表してメッセージを送信できるトークンを取得する必要があります。
「コミュニティ管理」-「設定」-「APIの操作」-「アクセスキー」 。

 新しいメッセージを受信するには、「Callback API」または「Long Poll」の2つの方法があります。 
      
        
        
        
      
      「コールバックAPI」を使用します。 
「コールバックAPI」は、json形式でデータを送信します。
 {   "type":"message_new",   "object":{      "id":1,      "date":1499441696,      "out":0,      "user_id":1,      "read_state":0,      "title":" ... ",      "body":"Hello"   },   "group_id":1,   "secret":"111111" }
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
      
      「コールバックAPI」では、サーバーアドレスを指定する必要があります。 サーバーとしてファルコンを使用します
「コミュニティ管理」-「設定」-「APIの操作」-「コールバックAPI」。


「コールバックAPI」のサーバーを確認します。
 import falcon GROUP_ID = "YOUR GROUP ID" CONFIRMATION = "YOUR CONFIRMATION CODE" class Bot(object): def on_post(self, req, resp): if req.content_length: data = json.loads(req.stream.read()) if "confirmation" == data.get("type") and GROUP_ID == data.get("group_id"): resp.data = CONFIRMATION application = falcon.API() application.add_route('/', Bot())
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
      
      次に、新しいメッセージを受信して送信するためのハンドラを作成します。 メッセージを送信するには、 py-vkontakteライブラリを使用します。
 # .... import vk api = vk.Api(TOKEN) #     group = api.get_group(GROUP_ID) class Bot(object): def on_post(self, req, resp): # .... user_id = data.get('object').get('user_id') text = data.get('object').get('body') if "message_new" == data.get("type"): group.send_message(user_id, text) resp.data = b"ok" # ....
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
      
      メッセージを正常に読み取ったことをVkontakteに伝えるには、文字列「ok」を送信する必要があります。
「エコーボット」の準備ができたら、実行できます
gunicorn bot:application
Instagramから写真を送信するボットを作成します
Instagramのドキュメントでは、 https://instagram.com/p/fA9uwTtkSN/に/ mediaを追加すると、JPGファイルが返されると書かれています。
まず、ユーザーが送信したメッセージがInstagramサイトへのリンクであることを確認する関数を作成します。
 from urllib.parse import urlsplit def is_instagram_link(self, link): url = urlsplit(link) if url.netloc in ["www.instagram.com", "instagram.com"]: return True return False
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
      
      リンクに/メディアを追加し、このJPGをダウンロードする関数を作成しましょう
 import io from urllib.parse import urljoin import requests def get_instagram_photo(self, instagram_photo_link): url = urljoin(instagram_photo_link, 'media/?size=l') response = requests.get(url) if not response.ok: raise ValueError() file_like = ('photo.jpg', io.BytesIO(response.content)) return file_like
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
      
        ?size = lは、返されたjpgのサイズを示すパラメーターです 
      
        
        
        
      
      response.okでない場合: -リンクが正しくない可能性があるため、これを確認する必要があります 
      
        
        
        
      
      file_like =( 'photo.jpg'、io.BytesIO(response.content)) -受信したJPGを送信用に準備します 
  is_instagram_link
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    とget_instagram_photo
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    をclass Bot
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
    追加し、作業のロジックを変更します。新しいメッセージが到着すると、JPGを送信します。 
 class Bot(object): def on_post(self, req, resp): # .... if "message_new" == data.get("type"): if not self.is_instagram_link(message_text): group.send_messages(user_id, message='      instagram.com') else: try: instagram_photo = self.get_instagram_photo(instagram_photo_link=message_text) group.send_messages(user_id, image_files=[instagram_photo]) except ValueError: group.send_messages(user_id, message='   ,   ') resp.data = b'ok' # ....
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      追加リンク: