C#でkintoneからデータを取得する
タイトルの通りです
仕事でkintoneからデータを取得する案件があったのですが
Google検索ではヒントになる情報があまりなく出てきたコードも動かなかったので
ヒントを元にC#で自分で書き直してみました
内容としては大量にあるデータを100件ずつ読み込んで
コンソール上に表示していくものとなります
Newtonsoft.Jsonを使っているので別途プラグインインストールしてください
Visual C# 2019にて
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
using System.Collections.Generic;
namespace get_kintone
{
class Program
{
static void Main(string[] args)
{
getData("sub_domain", "token", "app_id");
}
static void getData(String sub_domain, String token, String app_id)
{
string authenticationSchemaAPI = "X-Cybozu-API-Token";
string authenticationSchema = "X-Cybozu-Authorization";
string authenticationSchemaBasic = "Authorization";
var client = new WebClient();
client.Headers[HttpRequestHeader.Accept] = "text/csv";
client.Headers[HttpRequestHeader.ContentType] = "text/csv;charset=UTF-8";
client.Headers.Add(authenticationSchemaAPI, token);
client.Headers.Add("Host", sub_domain + ".cybozu.com:443");
Encoding enc = Encoding.GetEncoding("UTF-8");
String url = make_url(sub_domain, app_id, 0, 100);
Stream s = client.OpenRead(url);
StreamReader sr = new StreamReader(s, enc);
string data = sr.ReadToEnd();
dynamic json = JsonConvert.DeserializeObject(data);
int count = json.totalCount;
sr.Close();
s.Close();
int k = 1;
for (int i = 0; i <= count; i += 100)
{
System.Threading.Thread.Sleep(1000);
url = make_url(sub_domain, app_id, 100, i);
s = client.OpenRead(url);
sr = new StreamReader(s, enc);
data = sr.ReadToEnd();
sr.Close();
s.Close();
json = JsonConvert.DeserializeObject(data);
int j = 0;
foreach (dynamic datas in json.records)
{
Console.WriteLine("{0}", json.records[j].「カラム名」.value);
j++;
}
}
static String make_url(String sub_domain, String app_id, int limit, int offset)
{
return "https://" + sub_domain + ".cybozu.com/k/v1/records.json?app=" + app_id +
"&totalCount=true&query=" + System.Web.HttpUtility.UrlEncode("limit " + limit.ToString() + " offset " + offset.ToString());
}
}
}
