ライブラリを使わずにSwiftからGASを叩く方法

Swift

この投稿ではSwiftからGAS(GoogleAppsScript)の簡易APIを叩く方法について考えます。

私はGASとiOS開発を主にしていますが、「iOS側からGAS叩きたいな」とずっと思っていました。

GASをiOSから叩く方法はいくつかあります。ExtentionAPIを使ったり、ライブラリを使ったりできますが、どれもサクッとはできません。GASで作るAPIってサーバーレスだからいいんじゃないですか。シンプルに実装したいじゃないですか。

ということで今回は、外部ライブラリ等を利用せずに、標準フレームワークを使ってGASを叩いてみる方法を軽くご紹介します。

完成例

Google版Excelである、Googleスプレッドシートにあるデータの任意の列(row)、行(colom)にあるデータを、持ってくることができます。

やり方

まずはやってみましょう!!

まずは、指定した列と行に対応するデータを返す必要がありますから、スプレッドシートに適当にデータを入力しておきます。

自分の場合は、A1セルに、=CELL(“address”,A1) と入力し、これをオートフィルしました。

次に、GoogleSpreadsheetからスプレッドシートを開いて、下のコードをコピペします。

GAS

function myFunction(row,colom) {
    var ss = SpreadsheetApp.getActiveSpreadsheet()
    var sss = ss.getSheetByName('シート1')
    var data = sss.getDataRange().getValues()
    return {'data':data[colom+1][row+1]}
}

function doGet(e){
    var usecase = e.parameter.usecase
    if (usecase == "iosgetcurrent"){
        var result = myFunction(Number(e.parameter.row),Number(e.parameter.colom));
        return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
    }
}

この後、下の画像のように、「公開」から「ウェブアプリケーションとして導入」を押します。この辺りは詳しくはこちらの記事を参照してください。

これでWeb側の準備は完了です。次に、Swift側の準備をします。

Swift

こちらの記事を参照に、新規プロジェクトを立ち上げたら、同じく、下のコードを、ViewController Classの中にメソッドとして用意します。コピペで大丈夫です。

func getHTTP(){
    let apiUrl = "https://script.google.com/macros/s/AKfycbxZfq0m_19g4RgT53B_Bbtm-aCk_LhzMdCNKpFNCe2CvcK837sH/exec?"
    
    let paramString = "usecase=iosgetcurrent&colom=1&row=1"
    
    var request = URLRequest(url: URL(string: apiUrl + paramString)!)
    request.httpMethod = "GET"
    let task = URLSession.shared.dataTask(with: request, completionHandler: {
        (data, response, error) in
        if error != nil {
            print(error as Any)
            return
        }
        print("response: \(response!)")
        
        let decodedOutput = String(data: data!, encoding: .utf8)!
        
        print("decoded output: \(decodedOutput)")
        
        struct NewJson: Codable {
            var celstr: String
        }
        
        let data: Data = data!
        let decoder: JSONDecoder = JSONDecoder()
        do {
            let newJson: NewJson = try decoder.decode(NewJson.self, from: data)
            print(newJson)
            print(newJson.celstr)
            
        } catch {
            print("json convert failed in JSONDecoder", error.localizedDescription)
        }
    })
    task.resume()
}

これで完了です! お疲れ様でした!

タイトルとURLをコピーしました