以前の (レガシー) バージョンの Google フォームでは、次のような URL に HttpPost を送信することにより、プログラムでフォームにデータを投稿することができました。
https://spreadsheets.google.com/formResponse?formkey=[key]
そして次のようなデータ:
entry.1.single=data&entry.2.single=moredata
Googleフォームの新しいバージョン(2013年1月にリリースされたと思います)では、URL構造が異なります。「ライブ フォーム ページの表示」からのスニペットを次に示します。
<form action="https://docs.google.com/forms/d/1Ee330GpkMHX_0dKWmJb6ZPdm4FBhhqJSqBbgysEtq6M/formResponse" method="POST" ...
<input type="text" name="entry.1566150510"
このコード スニペットから、次のような URL に投稿できると思います。
https://docs.google.com/forms/d/[key]/formResponse
次のようなデータを使用します。
entry.1566150510=data
しかし、私は次のようにjava(android)からそれを試しました:
public void postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
Log.i(myTag, "Inside postData()");
String fullUrl = "https://docs.google.com/forms/d/1Ee330GpkMHX_0dKWmJb6ZPdm4FBhhqJSqBbgysEtq6M/formResponse";
Log.i(myTag, "url = " + fullUrl);
HttpPost httppost = new HttpPost(urlBase);
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("entry.1566150510", "somedata"));
UrlEncodedFormEntity data = new UrlEncodedFormEntity(nameValuePairs);
Log.i(myTag, data.toString());
httppost.setEntity(data);
Log.i(myTag, EntityUtils.toString(data));
// Execute HTTP Post Request
ResponseHandler<String> responseHandler=new BasicResponseHandler();
String response = httpclient.execute(httppost, responseHandler);
Log.i("DocsUploader", "response = " + response);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
そして、404、見つかりませんという応答が返されます。
ここで明らかな何かが欠けているのでしょうか、それとも Google が新しいフォームに投稿する機能を削除したのでしょうか?