설명은 https://developers.google.com/url-shortener/v1/getting_started 이고, 참고한 소스는 http://wireshock.com/easy-goo-gl-url-shortener-class-for-java/ 이다.
처음엔 구글에서 지원하는 기능으로 만들었었다.
그런데 이클립스에서는
{"longUrl":"http://www.amazon.com"}
으로 만들어서 서버로 보내는데, apk로 만들어서 테스트를 하게되면
{"a":"http://www.amazon.com"}
으로 만든다.
구글에서 제공하는 기본 라이브러리와 저 참조 페이지의 소스를 이용한건데 이랬다.
그래서 바꿨다.
private void makeShortUrl() { String url = "http://www.amazon.com/gp/product/B002HE537W/ref=s9_wish_gw_d14_g79_i1?ie=UTF8&colid=8PH4GCSLSBIC&coliid=I3SN4RIGHSGEM9&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=01KA8NV42R2ZDV7KQCP0&pf_rd_t=101&pf_rd_p=1630083502&pf_rd_i=507846"; shortenTask.execute(url); } private void onGetShortUrl(String $shortUrl) { Log.i("MainActivity.java | onGetShortUrl", "|" + $shortUrl + "|"); } private AsyncTask<String, Integer, String> shortenTask = new AsyncTask<String, Integer, String>() { @Override protected String doInBackground(String... params) { return UrlShortenUtil.shorten(params[0]); } protected void onPostExecute(String result) { onGetShortUrl(result); }; };
네트웍 왔다갔다하는 작업이라 AsyncTask, Handler, Thread 등을 써야한다. 아 귀찮아
import java.io.BufferedReader; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.json.JSONObject; import android.util.Log; public class UrlShortenUtil { private static final String URL_GOOGL_SERVICE = "https://www.googleapis.com/urlshortener/v1/url"; public static String shorten(String $longUrl) { DefaultHttpClient client = new DefaultHttpClient(); String result = null; BufferedReader reader = null; try { HttpPost kRequest = new HttpPost(URL_GOOGL_SERVICE); kRequest.setHeader("Content-Type", "application/json"); JSONObject longUrlJson = new JSONObject(); longUrlJson.put("longUrl", $longUrl); Log.i("UrlShortenUtil.java | shorten", "|" + $longUrl + " | " + longUrlJson + "|"); StringEntity kStringEntity = new StringEntity(longUrlJson.toString(), HTTP.UTF_8); kRequest.setEntity(kStringEntity); HttpResponse kResponse = client.execute(kRequest); String jsonResult = EntityUtils.toString(kResponse.getEntity()); try { result = new JSONObject(jsonResult).getString("id"); } catch (Exception e) { e.printStackTrace(); } Log.i("UrlShortenUtil.java | shorten", "|" + result + "|"); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (Exception e) { e.printStackTrace(); } } client.getConnectionManager().closeExpiredConnections(); } return result; } }
소스를 참고한 곳에 있는 Gson 이란 놈이 이상하게도 apk를 만들고 나면 이상한 json을 만들어 버려서 기존에 사용하던 네트웍 함수를 고쳐서 쓰기로 했다.
결과는 이렇게 잘 넘어온다.
http://goo.gl/81DnK0
<uses-permission android:name="android.permission.INTERNET" />