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());
        }
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.