6

在尝试自己导入库后,我终于设法发现我可以使用 Google Plugin for Eclipse 来做到这一点,here

但是,我似乎无法找到任何关于如何在 Android 上实际使用 API 的示例,至少没有一个是可编译的,因为这些示例中所需的类似乎无法被 Eclipse 解析,所以我只能假设这些Google Plugin for Eclipse 为 URL Shortener API 导入的库中不存在类。与我能找到的示例最接近的是here,它似乎适用于Google App Engine,而不是Android,并且使用了我似乎无法访问的类。

所以问题是,我如何在 Android 应用程序中使用这个 API 来获取 URL 的缩短版本?最好,我想使用 API 密钥而不是 OAuth 来完成。

4

4 回答 4

7

首先在 google 控制台上创建一个项目并启用 url shortner api 并获取 api 密钥并使用以下 Asynctask 来获取缩短的 url。

 public class newShortAsync extends AsyncTask<Void,Void,String> {

        String longUrl="http://stackoverflow.com/questions/18372672/how-do-i-use-the-google-url-shortener-api-on-android/20406915";
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBar.setVisibility(View.VISIBLE);
         }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            progressBar.setVisibility(View.GONE);
            System.out.println("JSON RESP:" + s);
            String response=s;
            try {
                JSONObject jsonObject=new JSONObject(response);
                id=jsonObject.getString("id");
                System.out.println("ID:"+id);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        protected String doInBackground(Void... params) {
            BufferedReader reader;
            StringBuffer buffer;
            String res=null;
            String json = "{\"longUrl\": \""+longUrl+"\"}";
            try {
                URL url = new URL("https://www.googleapis.com/urlshortener/v1/url?key=YOUR_API_KEY");
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setReadTimeout(40000);
                con.setConnectTimeout(40000);
                con.setRequestMethod("POST");
                con.setRequestProperty("Content-Type", "application/json");
                OutputStream os = con.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(os, "UTF-8"));

                writer.write(json);
                writer.flush();
                writer.close();
                os.close();

                int status=con.getResponseCode();
                InputStream inputStream;
                if(status==HttpURLConnection.HTTP_OK)
                inputStream=con.getInputStream();
                else
                    inputStream = con.getErrorStream();

                reader= new BufferedReader(new InputStreamReader(inputStream));

                buffer= new StringBuffer();

                String line="";
                while((line=reader.readLine())!=null)
                {
                    buffer.append(line);
                }

                res= buffer.toString();

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return res;




        }
    }

然后只需执行此异步任务,您将获得一个 json 响应,其中 id 存在,只不过是缩短的 Url。

于 2016-09-29T05:25:22.800 回答
4
  1. 添加到application节点中的清单:
 <meta-data
         android:name="com.google.android.urlshortener.API_KEY"
         android:value="{YOUR_API_KEY}"/>
  1. 添加以下库:

google-api-client-1.17.0-rc.jar

google-api-client-android-1.17.0-rc.jar

google-api-services-urlshortener-v1-rev22-1.17.0-rc.jar

google-http-client-1.17.0-rc.jar

google-http-client-android-1.17.0-rc.jar

  1. 方法:

       String shorten(String longUrl){
    
       Urlshortener.Builder builder = new Urlshortener.Builder (AndroidHttp.newCompatibleTransport(), AndroidJsonFactory.getDefaultInstance(), null);
       Urlshortener urlshortener = builder.build();
    
        com.google.api.services.urlshortener.model.Url url = new Url();
        url.setLongUrl(longUrl);
        try {
           url = urlshortener.url().insert(url).execute();
            return url.getId();
        } catch (IOException e) {
            return null;
       }
    }
    
于 2013-12-05T17:39:27.767 回答
4

现在谷歌更短的 api 需要密钥才能工作。我尝试在清单中设置密钥,但它不起作用。密钥应由函数库设置。

Urlshortener.Builder builder = new Urlshortener.Builder (AndroidHttp.newCompatibleTransport(),
            AndroidJsonFactory.getDefaultInstance(), null);
    Urlshortener urlshortener = builder.build();

    com.google.api.services.urlshortener.model.Url url = new com.google.api.services.urlshortener.model.Url();
    url.setLongUrl(longUrl);
    try {
        Urlshortener.Url.Insert insert=urlshortener.url().insert(url);
        insert.setKey("Your API KEY");
        url = insert.execute();
        return url.getId();
    } catch (IOException e) {
        LogUtil.e(TAG, Log.getStackTraceString(e));
        return null;
    }
于 2016-04-01T07:33:16.120 回答
0

您显然也可以使用 gradle

repositories {
mavenCentral()
}

dependencies {
compile 'com.google.apis:google-api-services-urlshortener:v1-rev47-1.22.0'
}

Google Shortner java gradle 文档

于 2017-02-16T08:16:05.497 回答