GAS를 API 서버로 사용하여 iOS 앱에서 직접 스프레드시트 데이터를 가져옵니다.

처음에



이 포스트에서는 RPA 개발로서, 이하의 유스 케이스의 겹침을 상정하고 있습니다.
  • 스프레드 시트를 GAS (Google App Script)에서 조작하고 싶습니다
  • GAS 웹 애플리케이션 기능을 API 서버로 사용하여 iOS 앱에서 직접 요청하고 싶습니다.

    일부러 직접 iOS에서 GAS에 요청하지 않아도 ExtensionAPI의 iOS 버전이나 GAS에서 Firebase나 DynamoDB에 내보낸 후에 mBaaS로 데이터를 요청하는 것이 iOS 앱의 품질로 좋은 것은 틀림없습니다.
    단지 RPA의 출면으로 iOS 앱을 채용하는 일련으로 소개합니다.



    스프레드시트



    이번 예제에서 사용하는 스프레드시트는 제가 평소에 고민하고 있는 웨어러블 디바이스로 센싱할 수 있는 센서 데이터의 목록입니다.
    다음 이미지의 D, E, F, G, H 열을 사용하여 이해도 측정 확인 테스트를 수행하기 위한 앱을 생성한다고 가정합니다.



    GAS 소스 코드



    D열~H열을 샘플로 8개 취득해 보겠습니다.
    각각을 id , name , nameJP , description , usage8개의 JSON 레코드를 배열로 반환하는 설계로 합니다.
    GAS를 사용하기 위해 배열 형식으로 반환 할 수있는 API 형식이 없으므로 {'vitals': getVitalDatas()}에서 JSON 형식으로 래핑하여 값을 iOS 앱에 전달합니다.

    GAS의 웹 앱 공개에 대해서는 여기이 참고가 될 것입니다.

    api.gs
    function getVitalDatas() {
      var spreadsheetId = '1E6************lgY';
      var rangeName = 'sensorList!D3:H10';
      var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
      if (!values) {
        Logger.log('No data found.');
      } else {
        var resultArray = [];
        for (var row = 0; row < values.length; row++) {
          var jsonRecord = {
            'id': values[row][0],
            'name': values[row][1],
            'nameJP': values[row][2],
            'description': values[row][3],
            'usage': values[row][4]
          }
          resultArray.push(jsonRecord);
        }
        return resultArray;
      }
    }
    
    function doGet(e){
        var result = JSON.stringify({'vitals': getVitalDatas()});
        return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
    }
    

    Swift 소스 코드



    받는 쪽으로서 Vital 형과 그것을 랩핑 한 Result 형을 정의하고 있습니다.
    Result형에 디코드한 값을 vitals로서, 문제 없이 취득할 수 있었는지 확인합니다.

    APIRequest.swift
    import Foundation
    
    struct APIRequest {
    
        static let mainAPIHost: String = "https://script.google.com/macros/s/AKf****************swg/exec"
    
        static func getSheetData(){
    
            var request = URLRequest(url: URL(string: mainAPIHost)!)
            request.httpMethod = "GET"
            let task = URLSession.shared.dataTask(with: request) { data, response, error in
                guard let jsonData = data else { return }
    
                struct Result: Codable {
                    var vitals: [Vital]
                }
    
                do {
                    let vitals = try JSONDecoder().decode(Result.self, from: jsonData)
                    print(vitals)
                } catch {
                    print(error.localizedDescription)
                }
            }
            task.resume()
        }
    }
    
    struct Vital: Codable {
        var id: String
        var name: String
        var nameJP: String
        var description: String
        var usage: String
    }
    

    iOS 앱 측에서 데이터 획득 확인



    디버그 로그 화면에, Vital형 형식에 매핑 되어 그것을 배열로 하는 Result형을 취득 할 수 있는 것을 확인할 수 있습니다.



    끝에



    이 응용 프로그램은 EvangVitalData로 나중에 AppStore에 게시 될 예정입니다.
    생체 데이터의 확인 테스트를 할 수 있으므로 만약 보면 놀아보세요.
  • 좋은 웹페이지 즐겨찾기