VKontakteグループ(Perl)に写真付きのニュースを投稿します

情報リソースを作成するとき、日常業務の自動化について考える必要があります。 この記事では、ソーシャルネットワーク(Vkontakte)のページまたはグループに置くために、ニュース、特別オファー、またはその他の有用な情報などの数行のPerlを使用する簡単な方法を検討します。 画像、テキスト、リンクと同時に。




ショートプラン:
1. VKontakteアプリケーションを作成します。
2.アプリケーションへのトークンを生成します
3.写真をアップロードするためのサーバーURLを取得します。
4.前に受信したサーバーに写真をアップロードします。
5.サーバーに画像を保存します。
6.ページに写真を載せてニュースを投稿します。

1. VKontakte Webサイトでアプリケーションを作成します。
サイトの下部には、開発者へのリンクと[アプリケーションの作成]ボタンがあります。
名前とスタンドアロンアプリケーションを選択します。
作成後、[アプリケーションの編集設定]タブに、アプリケーションのIDが表示されます(覚えておいてください)。

2.トークン(作成されたスクリプトがサイトで許可されるキー)を受け取ります。 これを行うには、ブラウザーでページを開きます。
https://oauth.vk.com/authorize?client_id={ID}&scope=wall,photos,audio,video,docs,notes,groups,messages,notifications,stats,ads,notify,friends,offline&redirect_uri=http://oauth.vk.com/blank.html&display=page&response_type=token 

どこで
{ID}-作成されたアプリケーションのID。たとえば、1234563、
スコープは、許可されるアプリケーションの権利です。
(壁-壁への投稿、写真-写真のアップロード、グループ-グループへのアクセス、メッセージ-メッセージ、友人の送信-友人およびオフラインへのアクセス-トークンが終了せず、スクリプトが常にサイトにアクセスできるようにします)。
response_type = token-トークンを取得します。

次に、スクリプトに移動します。

入力パラメーター:


 #!/usr/bin/env perl use strict; use LWP; use HTTP::Request::Common; my $token = '55e43443343435355a3e70e805722345552227'; #      my $gid = '65596688'; #  ID      . my $file = '/home/ds/test/2.jpg'; #     my $site_url = 'http://example.com'; #    ,        my $message = '  '; #     . 


3.ここで、写真をアップロードするVKontakteサーバーを取得する必要があります。


 #      getWallUploadServer my $url1 = "https://api.vkontakte.ru/method/photos.getWallUploadServer?gid=$gid&access_token=$token"; my $res_url = &get_data($url1); $res_url =~ s/([\\'])?//g; #   . $res_url = $1 if ($res_url =~ m/.*?upload_url\"\:\"(.*?)\".*?/); #  URL. my ($url , $param) = split(/\?/, $res_url); #  url       my %url_param = map {split("=")} split("&", $param); 


4.指定されたURLに画像をダウンロードします。


  my $ua = LWP::UserAgent->new (agent=>'Mozilla/5.0', requests_redirectable=>0); my $res = $ua->request ( POST "$url", Content_Type => 'multipart/form-data', Content => [ 'act' => $url_param{'act'}, 'mid' => $url_param{'mid'}, 'aid' => $url_param{'aid'}, 'gid' => $url_param{'gid'}, 'hash' => $url_param{'hash'}, 'rhash' => $url_param{'rhash'}, 'swfupload' => $url_param{'swfupload'}, 'api' => $url_param{'api'}, 'wallphoto' => $url_param{'wallphoto'}, 'photo' => [$file], ], ) die("$!"); my $res_upload = $res->as_string(); $res_upload =~ s/([\\'])?//g; #  . #      my $server_upload = $1 if ( $res_upload =~ m/server\"\:(.*?),\".*/); my $photo_upload = $1 if ( $res_upload =~ m/\"photo\"\:\"(.*?)\",\"hash.*/); my $hash_upload = $1 if ( $res_upload =~ m/\"hash\"\:\"(.*?)\"}$/); 


5.その後、ダウンロードした画像をサーバーに記録する必要があります。


  my $url2 = "https://api.vkontakte.ru/method/photos.saveWallPhoto?gid=$gid&access_token=$token&server=$server_upload&photo=$photo_upload&hash=$hash_upload"; my $res_save = get_data($url2); my $ph_id = $1 if ( $res_save =~ m/\"id\"\:\"(.*?)\",\".*/); #      


6.そして最後の壁への投稿:


  my $url3 = "https://api.vkontakte.ru/method/"."wall.post?owner_id=-$gid&attachments=$ph_id,$site_url&from_group=1&access_token=$token"; #  url  . $url3 .="&message=$message" if ($message); #   ,   . my $res_post = get_data($url3); 

、owner_idには「-」記号(マイナス)が必要です。 これはグループです。
from_group = 1-グループに代わってニュースを投稿します。

結論として、httpデータを送信するためにアクセスされた小さなget_data()プロシージャ。
  my $url = shift; my $ua = LWP::UserAgent->new (agent=>'Mozilla/5.0', requests_redirectable=>0); my $get_url = $ua->request (GET "$url") die("$!"); my $res_url = $get_url->as_string(); return ($res_url); 


自動化のためのいくつかのvkontakteリンク:
メッセージを送信する:

 https://api.vkontakte.ru/method/messages.send?uid={UID}&message={MSG}&title={TITLE}&access_token={TOKEN} 

UIDはメッセージの送信先のユーザーのIDです(これはデジタル値です。友人のURLに文字IDが表示されている場合は、彼のアルバムにアクセスするとURLに数字が表示されます)、{MSG}-メッセージ自体、{TITLE} -メッセージヘッダー、およびトークン。

ステータスを変更します。 ここではidは必要ありません。なぜなら アプリケーションはアカウントに関連付けられています。

 https://api.vkontakte.ru/method/status.set?text={TEXT}&access_token={TOKEN} 


グループへの簡単なウォールポストの投稿。

 https://api.vkontakte.ru/method/wall.post?owner_id=-{GID}&message={MSG}&from_group=1&access_token={TOKEN} 

ここで、{GID}はマイナス記号付きのグループのデジタルID、{MSG}はメッセージ、from_groupは誰からのメッセージ(1-グループ(管理者の場合)から)です。

以上です。 もちろん、エラーチェックや終了コードなどを挿入する必要があります。 しかし、これはあなた次第です。

Source: https://habr.com/ru/post/J211198/


All Articles