OrangeGardenRoom

技術系のメモ

KintoneのカーソルAPIをPerlから使う

メモだよ。

PerlからKintoneのカーソルAPIを動かします。

※間違ってても責任持ちません。

 

 

 

サイボウズのページ

レコードの一括取得 -cybozu developer network

 

簡単に言うと、一括取得するためのキーを取得してデータを取っていく仕組み?

もともと用意されてたものは、単純に

リクエストなげて取得(1~999まで)

リクエストなげて取得(1000~1999まで)

…を回数分繰り返し。

 

 

カーソルAPI使う場合は、

・リクエスト(パラメータいろいろ)投げてID取得

・リクエストにID込めて投げるとデータ取得

・終わったらリクエストにID込めて投げてカーソル削除

 

 

use strict;
use warnings;
use utf8;
use Encode;
use LWP::UserAgent;
use HTTP::Request;
use JSON;
use MIME::Base64;

binmode STDOUT, ':utf8';


my $access_basicauth_id = "basicid";
my $access_basicauth_pass = "basicpass";

my $kintone_host = "kintonedev.cybozu.jp";
my $kintone_id = "kintoneid";
my $kintone_pass = "kitonepass";
my $kintone_app = "1";
my $kintone_getdata_per_page = "500";	# 1回ごとの取得データ数(最大500)


my $kintone_auth = encode_base64($kintone_host.":".$kintone_pass);
my $basic_auth = sprintf "basic %s", encode_base64($access_basicauth_id.":".$access_basicauth_pass);

my $requrl = "https://" . $kintone_host . "./k/v1/records/cursor.json";



# カーソルの作成(POSTリクエスト)
my $req = HTTP::Request->new('POST', => $requrl);

$req->header(
	'Authorization' => $basic_auth,
	'X-Cybozu-Ahthorization' => $kintone_auth,
	'Host' => $kintone_host,
	'Content-Type' => 'application/json'
);


# fieldsとqueryいれなけば全件取得
my $req_json = {
	"app" => $kintone_app,
#	"fields" => ["レコード番号","作成者","作成日時"],
#	"query" => "作成日時 = TODAY() order by レコード番号 asc",
	"size" => $kintone_getdata_per_page
};


$req->content(encode_json($req_json));

my $ua = LWP::UserAgent->new;
my $res = $ua->request($req);
my $content = $res->content;

my $cursorobj = decode_json($content);

my $cursor_id = $cursorobj->{'id'};		# カーソルID
my $totalcount = $cursorobj->{'totalCount'};	# 取得される要素数





# データの取得(GETリクエスト)
$req = HTTP::Request->new('GET', => $requrl."id=".$cursor_id);

$req->header(
	'Authorization' => $basic_auth,
	'X-Cybozu-Ahthorization' => $kintone_auth,
	'Host' => $kintone_host,
	'Content-Type' => 'application/json'
);

# 必要回数ループさせて取得
for (my $i = 0; $i < $totalcount / $kintone_getdata_per_page; $i++)
{
	$res = $ua->request($req);
	my $resjson = decode_json($res->content);
	
	# ここに諸々処理
}





# カーソルの削除(DELETEリクエスト)
$req = HTTP::Request->new('DELETE', => $requrl);


$req_json = {
	"id" => $cursor_id
};


$req->header(
	'Authorization' => $basic_auth,
	'X-Cybozu-Ahthorization' => $kintone_auth,
	'Host' => $kintone_host,
	'Content-Type' => 'application/json'
);

$req->content(encode_json($req_json));
$res = $ua->request($req);


 

実行してないのでコピペしてまま動かなかったらなんとなく直してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です