
この出版物では、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ライブラリを使用します。
メッセージを正常に読み取ったことを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):
ボットの例
ソースコード
追加リンク: