3

以前の (レガシー) バージョンの 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 が新しいフォームに投稿する機能を削除したのでしょうか?

4

2 に答える 2

2

google-apps-script を使用して更新を行うことを検討してください (作業が少なくなると思います)。また、Google がさらに微調整を行ったとしても、引き続き機能します。

于 2013-04-05T05:12:02.513 に答える
2

わかりました、HttpClient と HttpPost の使用に関する何かが間違っていました。何を台無しにしたのか正確にはわかりませんが、現在これを使用しており、正しく機能しています:

public void postData() {
    String fullUrl = "https://docs.google.com/forms/d/1Ee330GpkMHX_0dKWmJb6ZPdm4FBhhqJSqBbgysEtq6M/formResponse";
    HttpRequest mReq = new HttpRequest();
    String response = mReq.sendPost(fullUrl, "entry.1566150510=data");
    Log.i(myTag, response);
} 

HttpRequest は、MattC によって作成されたヘルパー クラスであり、次の質問への回答として投稿されています: Secure HTTP Post in Android

于 2013-04-05T21:25:31.340 に答える