google bookmarket api

简介: 引用: 最近做了google书签同步的模块,发现google并没有公开bookmark相关的api接口,在网上也找了些资料,通过自己抓包分析,测试,总结下使用bookmark接口的心得,我是在android下测试的,应该不存在编程语言的问题。

引用:

最近做了google书签同步的模块,发现google并没有公开bookmark相关的api接口,在网上也找了些资料,通过自己抓包分析,测试,总结下使用bookmark接口的心得,我是在android下测试的,应该不存在编程语言的问题。

 

1.登录google账户(POST

    由于google bookmark没有公布api,测试google各种认证方式并通过抓包分析,发现想要获得bookmark服务,在请求时必须传递已登录后的Cookie信息。

请求:https://www.google.com/accounts/ServiceLoginAuth

头信息:Cookie="GALX=任意字符串" (此头信息必须有,其他头信息可根据需求添加,否则无法获取到Cookie,任意字符串也很重要,请求参数和此处应一致)

参数:GALX="字符串" (头信息中定义的GALX字符串,必须一致)

          Email="用户名"

          Passwd="密码"

Java代码可以用DefaultHttpClient方式测试,该类提供了获取和设置Cookie方法,通过验证Cookie中是否有SID,即可验证是否正确登录获得了Cookie。

 

Java代码 
  收藏代码
  1. /** 
  2.      * 登录google账户 
  3.      */  
  4.     private boolean googleLogin() {  
  5.         HttpPost post = new HttpPost("https://www.google.com/accounts/ServiceLoginAuth");  
  6.   
  7.         post.addHeader("Cookie""GALX=zidangtou");  
  8.   
  9.         List<NameValuePair> nvps = new ArrayList<NameValuePair>();  
  10.         nvps.add(new BasicNameValuePair("GALX""zidangtou"));  
  11.         nvps.add(new BasicNameValuePair("Email""******@gmail.com"));  
  12.         nvps.add(new BasicNameValuePair("Passwd""*****"));  
  13.   
  14.         try {  
  15.             post.setEntity(new UrlEncodedFormEntity(nvps));  
  16.             HttpResponse response = mClient.execute(post);  
  17.             if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK && validateLogin()) {  
  18.                 return true;  
  19.             }  
  20.         } catch (UnsupportedEncodingException e) {  
  21.             e.printStackTrace();  
  22.         } catch (ClientProtocolException e) {  
  23.             e.printStackTrace();  
  24.         } catch (IOException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.         return false;  
  28.     }  

  

2..获取书签列表(GET)

请求:https://www.google.com/bookmarks/?output=xml&sort=title&num=1000 

参数说明:output:导出的方式xml/rss

                 sort:排序方式,title 以标题排序,date 以建立Bookmark日期排序

                 Num:书签数量 

若要添加,修改或删除书签,必须要通过https://www.google.com/bookmarks/?output=rss式,获取响应实体,从中拿到sig签名数据,才能在修改书签时成功修改。

 

Java代码 
  收藏代码
  1. /** 
  2.      * 获取服务器书签数据,获取sig参数 
  3.      */  
  4.     private void getBookmarks() {  
  5.         HttpGet get = new HttpGet("https://www.google.com/bookmarks/lookup?output=rss");  
  6.         try {  
  7.             HttpResponse response = mClient.execute(get);  
  8.             if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
  9. //              Log.d("getBookmarks", EntityUtils.toString(response.getEntity()));  
  10.                 mSig= getSignature(response.getEntity().getContent());  
  11.                 Log.d("getSignature""mSig = "+mSig);  
  12.             }  
  13.         } catch (ClientProtocolException e) {  
  14.             e.printStackTrace();  
  15.         } catch (IOException e) {  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  

  

3.添加/修改书签(POST)

        请求:https://www.google.com/bookmarks/mark

        或https://www.google.com/bookmarks/mark?op=edited

        或https://www.google.com/bookmarks/mark?op=updated

        参数:sig=签名认证(获取书签列表时以https://www.google.com/bookmarks/lookup?output=rss获取时得到

                  bkmk=URL
                  title=标题
                  labels=标签(可以为多个,以逗号隔开)
                  annotation=注解

        若书签已存在(URL相同),则修改服务器书签,完全覆盖(label被完全替换为传上去的标签)。

 

Java代码 
  收藏代码
  1. <span style="white-space: pre;">    </span>/** 
  2.      * 添加单个书签 
  3.      */  
  4.     private void addBookmark() {  
  5.         HttpPost post = new HttpPost("https://www.google.com/bookmarks/mark");  
  6.         ArrayList<BasicNameValuePair> bnvps = new ArrayList<BasicNameValuePair>();  
  7.         bnvps.add(new BasicNameValuePair("bkmk","www.ceshi.com"));  
  8.         bnvps.add(new BasicNameValuePair("title","title_ceshi"));  
  9.         bnvps.add(new BasicNameValuePair("annotation","anno_ceshi"));  
  10.         bnvps.add(new BasicNameValuePair("labels","label_ceshi"));  
  11.         try {  
  12.             post.setEntity(new UrlEncodedFormEntity(bnvps));  
  13.             mClient.execute(post);  
  14.         } catch (UnsupportedEncodingException e) {  
  15.             e.printStackTrace();  
  16.         } catch (ClientProtocolException e) {  
  17.             e.printStackTrace();  
  18.         } catch (IOException e) {  
  19.             e.printStackTrace();  
  20.         }  
  21.     }  

  

4.批量添加/修改书签(POST

请求:https://www.google.com/bookmarks/mark?op=upload_selection&sig=签名字符串

参数:bm_序号="X"

         url_序号=URL

      ttl_序号=标题

         lbl_序号=标签

参数中可添加多个书签,以序号区别,例:

bm_1=X,url_1=www.shuqian1.com,ttl_1=书1,lbl_1=标签1

bm_2=X,url_2=www.shuqian2.com,ttl_2=书签2,lbl_2=标签2

此接口特性:若书签已存在,则修改服务器书签,但并不覆盖(若服务器书签有label,则上传的label会被加载已有label的后面)

 

Java代码 
  收藏代码
  1. /** 
  2.      * 批量添加多个书签 
  3.      */  
  4.     private void batchAddBookmarks() {  
  5.         HttpPost post = new HttpPost("https://www.google.com/bookmarks/mark?op=upload_selection&sig="+mSig);  
  6.         ArrayList<BasicNameValuePair> bnvps = new ArrayList<BasicNameValuePair>();  
  7.           
  8.         bnvps.add(new BasicNameValuePair("bm_1","X"));  
  9.         bnvps.add(new BasicNameValuePair("url_1","www.ceshi1.com"));  
  10.         bnvps.add(new BasicNameValuePair("ttl_1","ceshi1"));  
  11.         bnvps.add(new BasicNameValuePair("lbl_1","111"));  
  12.           
  13.         bnvps.add(new BasicNameValuePair("bm_2","X"));  
  14.         bnvps.add(new BasicNameValuePair("url_2","www.ceshi2.com"));  
  15.         bnvps.add(new BasicNameValuePair("ttl_2","ceshi2"));  
  16.         bnvps.add(new BasicNameValuePair("lbl_2","222"));  
  17.         try {  
  18.             post.setEntity(new UrlEncodedFormEntity(bnvps));  
  19.             mClient.execute(post);  
  20.         } catch (UnsupportedEncodingException e) {  
  21.             e.printStackTrace();  
  22.         } catch (ClientProtocolException e) {  
  23.             e.printStackTrace();  
  24.         } catch (IOException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.     }  

  

5.删除书签GET

请求:https://www.google.com/bookmarks/mark?dlq=书签Id&sig=签名字符串

获取书签时以output=xml请求到的数据里有书签id信息。

 

Java代码 
  收藏代码
  1. /** 
  2.      * 删除书签 
  3.      */  
  4.     private void deleteBookmark() {  
  5.         HttpGet get = new HttpGet("https://www.google.com/bookmarks/mark?dlq=书签id&sig="+mSig);  
  6.         try {  
  7.             mClient.execute(get);  
  8.         } catch (UnsupportedEncodingException e) {  
  9.             e.printStackTrace();  
  10.         } catch (ClientProtocolException e) {  
  11.             e.printStackTrace();  
  12.         } catch (IOException e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.     }  

  

总结http://zidangtou.iteye.com/blog/748692

1.必须获取到cookie信息后才能正确调用bookmark接口(详见登录google账户)

2.上述接口调用时httpClient用的是同一个对象,里面有cookie信息

3.Sig签名的获取:详见获取书签列表

4.bookmark的接口必须为https类型

 

参考资料

1.http://www.bookmarked.mobi/bm/google_bookmarks_api/

2.http://chuiwenchiu.spaces.live.com/blog/cns!CA5D9227DF9E78E8!860.entry

3.http://www.codeproject.com/KB/IP/GoogleBookmarks.aspx

相关文章
|
5月前
|
人工智能 Java API
Google Gemini API 接口调用方法
Google 最近发布的 Gemini 1.0 AI 模型通过其升级版,Gemini,标志着公司迄今为止最为强大和多功能的人工智能技术的突破。
|
3月前
|
人工智能 自然语言处理 数据挖掘
详解:Google AI Gemini中文版本(基于API 开发实现对话)
谷歌旗下的人工智能应用Gemini,自问世以来凭借其强大的计算能力和高效的处理性能,迅速成为全球用户的宠儿。作为一款由世界顶尖科技公司开发的产品,Gemini不仅在语言处理、图像识别、数据分析等领域表现出色,还在多种复杂任务中展现了其卓越的智能决策能力。然而,由于网络限制等问题,国内用户往往无法直接访问和使用Gemini的网站,这也导致了许多技术爱好者和专业人士未能亲身体验这一先进技术所带来的便利和强大功能。
|
4月前
|
域名解析 JavaScript 网络协议
技术心得记录:如何使用google地图的api(整理)
技术心得记录:如何使用google地图的api(整理)
329 0
|
5月前
|
JSON 搜索推荐 API
【2024更新】如何使用google index api来自动提交url
本文提供了一个详细的指南,说明如何创建并使用使用google index api,google自动提交url来优化seo。
|
12月前
|
关系型数据库 MySQL API
Go语言微服务框架 - 6.用Google风格的API接口打通MySQL操作
随着RPC与MySQL的打通,整个框架已经开始打通了数据的出入口。 接下来,我们就尝试着实现通过RPC请求操作MySQL数据库,打通整个链路,真正地让这个平台实现可用。
37 0
|
机器学习/深度学习 数据采集 人工智能
好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)
谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和OpenAI的ChatGPT进行对比,Google Bard在ChatGPT面前似乎有些技不如人。 事实上,Google Bard并非对标ChatGPT的产品,Bard是基于LaMDA模型对话而进行构建的,Bard旨在构建一个对话式的AI系统,使其能够更好地理解人类语言,并且具备进行多轮对话的能力。而GPT的目标是生成自然语言文本。
好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)
|
Web App开发 前端开发 JavaScript
《智能前端技术与实践》——第 2 章 前端开发基础 ——2.5 与 Google 扩展程序相关的 JavaScript API
《智能前端技术与实践》——第 2 章 前端开发基础 ——2.5 与 Google 扩展程序相关的 JavaScript API
|
Ubuntu JavaScript 前端开发
Google Map api国内正常使用该如何配置(2021最新)
Google Map api国内正常使用该如何配置(2021最新)
486 0
Google Map api国内正常使用该如何配置(2021最新)
EMQ
|
消息中间件 运维 Kubernetes
EMQX Enterprise 4.4.11 发布:CRL/OCSP Stapling、Google Cloud Pub/Sub 集成、预定义 API 密钥
EMQX Enterprise最新的4.4.11版本发布了CRL(证书吊销列表)与OCSP Stapling为客户端提供更灵活的安全防护,新增Google Cloud Pub/Sub集成帮助用户通过Google Cloud各类服务发掘更多物联网数据价值。
EMQ
143 0
EMQX Enterprise 4.4.11 发布:CRL/OCSP Stapling、Google Cloud Pub/Sub 集成、预定义 API 密钥
|
存储 传感器 编解码
微软行星云计算planet platform中的高分辨率影像通过API接入Google Earth Engine(GEE)
微软行星云计算planet platform中的高分辨率影像通过API接入Google Earth Engine(GEE)
399 0
微软行星云计算planet platform中的高分辨率影像通过API接入Google Earth Engine(GEE)