Публикация на goo.gl с Android - PullRequest
3 голосов
/ 19 мая 2011

Продолжайте получать это:

V/RESPONSE(13605):  {
V/RESPONSE(13605):  "error": {
V/RESPONSE(13605):   "errors": [
V/RESPONSE(13605):    {
V/RESPONSE(13605):     "domain": "global",
V/RESPONSE(13605):     "reason": "parseError",
V/RESPONSE(13605):     "message": "This API does not support parsing form-encoded input."
V/RESPONSE(13605):    }
V/RESPONSE(13605):   ],
V/RESPONSE(13605):   "code": 400,
V/RESPONSE(13605):   "message": "This API does not support parsing form-encoded input."
V/RESPONSE(13605):  }
V/RESPONSE(13605): }

используя этот код:

String apiKey = "blahblahblah";
String address="https://www.googleapis.com/urlshortener/v1/url";
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(address);
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("key", apiKey));
pairs.add(new BasicNameValuePair("longUrl", original));

try {
    post.setEntity(new UrlEncodedFormEntity(pairs));
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

try {
    org.apache.http.HttpResponse response = client.execute(post);
    String responseBody = EntityUtils.toString(response.getEntity());
    Log.v("RESPONSE"," "+responseBody);
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    tinyUrl="Protocol Error";
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    tinyUrl="IO Error";
}

Я не уверен, как это отформатировать. Есть идеи?

Я пытался удалить UrlEncodedFormEntity, но, конечно, это не сработало.

Ответы [ 2 ]

4 голосов
/ 19 мая 2011

Вам необходимо отправить данные в формате json, а не в кодированном виде, как вы пытаетесь.

Ознакомьтесь с документацией здесь .

Изменитеобъект должен быть StringEntity следующим образом:

post.setEntity(new StringEntity("{\"longUrl\": \"http://www.google.com/\"}"));

Также установите тип содержимого запроса:

post.setHeader("Content-Type", "application/json");
1 голос
/ 31 октября 2014

Также рассмотрите возможность использования созданной мной библиотеки, которая предоставляет удобный интерфейс для сокращения ваших ссылок с помощью сервиса Goo.gl.

Он поддерживает ключ API и очень прост в использовании:

GoogleShortenerPerformer shortener = new GoogleShortenerPerformer(new OkHttpClient());

String longUrl = "http://www.andreabaccega.com/";

GooglShortenerResult result = shortener.shortenUrl(
    new GooglShortenerRequestBuilder()
        .buildRequest(longUrl)
    );
if ( Status.SUCCESS.equals(result.getStatus()) ) {
    // all ok result.getShortenedUrl() contains the shortened url!
}

Взгляните на репозиторий github здесь , который содержит дополнительную информацию:)

...