フォームを使用してGoogleスプレッドシートにデータを送信するために使用できるライブラリやブログ投稿などはありますか?
私はおそらくHttpPOSTのものを書くことができましたが、誰かが私が利用できるようにすでにそうしているのではないかと思っていました。
この質問は、Android用のこの質問に相当するiOSの質問に似ています。
フォームを使用してGoogleスプレッドシートにデータを送信するために使用できるライブラリやブログ投稿などはありますか?
私はおそらくHttpPOSTのものを書くことができましたが、誰かが私が利用できるようにすでにそうしているのではないかと思っていました。
この質問は、Android用のこの質問に相当するiOSの質問に似ています。
@Saad Farooqの回答に基づいて、実際にコードを書いてみました
- (void)viewDidLoad
{
[super viewDidLoad];
//if there is a connection going on just cancel it.
[self.connection cancel];
//initialize new mutable data
NSMutableData *data = [[NSMutableData alloc] init];
self.receivedData = data;
//initialize url that is going to be fetched.
NSURL *url = [NSURL URLWithString:@"https://docs.google.com/forms/d/1yffvViDKq7BHALtC7Om-ceFLWT5hb_cM9sBqndHG3aU/formResponse"];
//initialize a request from url
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[url standardizedURL]];
//set http method
[request setHTTPMethod:@"POST"];
//initialize a post data
NSString *postData = @"entry.154268020=iOS&entry.940479455=vajhcsd&entry.247556683=BJKSVDB";
//set request content type we MUST set this value.
[request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
//set post data of request
[request setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]];
//initialize a connection from request
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
self.connection = connection;
//start the connection
[connection start];
}
そしてそれは実際に機能します。ここで@SaadのチュートリアルからURLなどを抽出する必要があります。ところで、私は前のリンクを投稿しようとした人でした。彼に知らせてくれたSOスタッフに大いに感謝します。
データを送信するGoogleスプレッドシートフォームの方法がはるかに簡単で、ここについてブログに書いていることがわかりました
次に、iOSからの単純なHTTPPOSTがそれを処理します。
gdata-objectivec-clientがあります。ここにスプレッドシートを使用するためのサンプルコードがいくつかあります。
私はSwiftを使用してこのタスクを実行しました。このリポジトリで確認してください:https ://github.com/goktugyil/QorumLogs
設定方法のチュートリアルは次のとおりです: https ://github.com/goktugyil/QorumLogs/blob/master/Log%20To%20GoogleDocs.md
これを行うためのコードは次のとおりです。
private static var googleFormLink: String!
private static var googleFormAppVersionField: String!
private static var googleFormUserInfoField: String!
private static var googleFormMethodInfoField: String!
private static var googleFormErrorTextField: String!
/// Setup Google Form links
static func setupOnlineLogs(#formLink: String, versionField: String, userInfoField: String, methodInfoField: String, textField: String) {
googleFormLink = formLink
googleFormAppVersionField = versionField
googleFormUserInfoField = userInfoField
googleFormMethodInfoField = methodInfoField
googleFormErrorTextField = textField
}
private static func sendError(#text: String) {
var url = NSURL(string: googleFormLink)
var postData = googleFormAppVersionField + "=" + text
postData += "&" + googleFormUserInfoField + "=" + "anothertext"
postData += "&" + googleFormMethodInfoField + "=" + "anothertext"
postData += "&" + googleFormErrorTextField + "=" + "anothertext"
var request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding)
var connection = NSURLConnection(request: request, delegate: nil, startImmediately: true)
}
特定の電子メールアドレスに制限して機能し、ユーザー名(電子メールアドレス)を自動的に送信するには、フォームの非表示フィールドを送信する必要があります
fbzx fvvdraftResponse pageHistoryトークン(これはアクセストークンではなく、「トークン」と呼ばれる形式の非表示の入力であり、次のようなものを使用します
NSString *authValue = [NSString stringWithFormat:@"Bearer %@", yourAccessTokenGottenFromGTMOAuth];
[request setValue:authValue forHTTPHeaderField:@"Authorization"];
特定の電子メールに制限されている場合に機能するために必要なアクセストークンを実行するには
cocoapodsを使用する
pod 'GTMOAuth2', '~> 1.1.2'
pod 'GTMSessionFetcher', '~> 1.1'
OSXの例が示すように認証を行います(GTMOAuth2のcocoapodに含まれています)
最初にフォームhtmlをHTTPGETし、fbzxやdraftResponse、tokenなどの非表示の入力フィールドに対して解析する必要があります(NSScannerを使用して解析するのが良い方法です)。
次に、それを取得し、Google認証からアクセストークンを取得したら、次のような投稿を行います。
draftResponse = stringGottenFromHTMLGETAndParse&entry.someNumber = someValue&fbzx = stringGottenFromHTMLGETAndParse2&fvv = stringGottenFromHTMLGETAndParse3&pageHistory = stringGottenFromHTMLGETAndParse4&token = stringGottenFromHTMLGETAndParse5
送信者をフォーム内の特定の電子メールアドレスに制限するときにHTTPPostが機能するようにGTMOAuth2を実行する必要がありましたが、draftResponseやtokenなどの非表示の入力は必要ありませんでした。
フォームでユーザーの電子メールを自動的に送信するオプションをフォームで有効にしたときに、HTTP POSTが機能するように、fbzxなどの非表示の入力を追加する必要がありました。