ショートプラン:
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-グループ(管理者の場合)から)です。
以上です。 もちろん、エラーチェックや終了コードなどを挿入する必要があります。 しかし、これはあなた次第です。