executeメソッドを使用しない場合、4,000,000人のオーディエンスを持つグループのメンバーを取得するプロセスには約22分かかり、約4,000のAPIリクエストを完了する必要があります。 executeメソッドを使用して、このプロセスを約40秒に加速し、約160個のクエリのみを実行します。
内容:
I.実行について少し
これは、他のメソッドのシーケンスを実行し、中間結果を保存およびフィルタリングできる汎用的なメソッドです。
他のすべてのメソッドと同様に単純な要求が行われますが、パラメーターではVKScriptで記述されたコードを渡す必要があります。
VKScriptは何をサポートしますか?
JavaScriptまたはActionScriptに似た言語です。 アルゴリズムは、コマンドreturn%expression%で終了する必要があります。 演算子はセミコロンで区切る必要があります。
以下がサポートされています。
- 算術演算
- 論理演算
- 配列とリストの作成([X、Y])
- parseIntおよびparseDouble
- 連結(+)
- 構築する場合
- パラメーターによる配列フィルター(@。)
- APIメソッド呼び出し、長さパラメーター
- whileステートメントを使用したループ
- Javascriptメソッド:スライス、プッシュ、ポップ、シフト、シフト解除、スプライス、substr
- 削除演算子
- 配列要素への割り当て。例:row.user.action = "test";
このメソッドを使用すると、1つのAPIリクエストで複数のメソッドの結果を取得できます。
II。 Javascriptの実装
再帰が以下で説明するプロシージャexecute.getMembersをプルする単純な関数を作成します。
getMembers(group_id);
グループのメンバーを取得するには、 executeを使用して 、1つのリクエストに対して25,000のメンバーを取得します。 実行では、 VKScript言語を使用して記述された最大25個のクエリを作成できます。 codeパラメーターでは、アルゴリズムをVKScript言語で渡す必要があります。
getMembersプロシージャが作成されました。これは、クライアントから毎秒3回取得します。
var members = API.groups.getMembers({"group_id": Args.group_id, "v": "5.27", "sort": "id_asc", "count": "1000", "offset": Args.offset}).items; // var offset = 1000; // while (offset < 25000 && (offset + Args.offset) < Args.total_count) // 20000 { members = members + "," + API.groups.getMembers({"group_id": Args.group_id, "v": "5.27", "sort": "id_asc", "count": "1000", "offset": (Args.offset + offset)}).items; // offset + offset = offset + 1000; // 1000 }; return members;
ソースと例
VKが存在する場合、次のようになりました。
作業例: http : //vk.com/app4236781
ソース: github.com/romkagolovadvayha/getmembersVKAPI.git