package com.weibo.sdk.android.api; import com.weibo.sdk.android.Oauth2AccessToken; import com.weibo.sdk.android.WeiboParameters; import com.weibo.sdk.android.net.RequestListener; /** * 该类封装了微博的位置服务接口,详情请参考<a href="http://open.weibo.com/wiki/%E4%BD%8D%E7%BD%AE%E6%9C%8D%E5%8A%A1">微博位置服务</a> * @author luopeng (luopeng@staff.sina.com.cn) */ public class PlaceAPI extends WeiboAPI { public PlaceAPI(Oauth2AccessToken accessToken) { super(accessToken); } private static final String SERVER_URL_PRIX = API_SERVER + "/place"; /** * 获取当前登录用户与其好友的位置动态 * * @param since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。 * @param max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0。 * @param count 单页返回的记录条数,最大为50,默认为20。 * @param page 返回结果的页码,默认为1。 * @param only_attentions true:仅返回关注的,false:返回好友的,默认为true。 * @param listener */ public void friendsTimeline( long since_id, long max_id, int count, int page, boolean only_attentions, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("since_id", since_id); params.add("max_id", max_id); params.add("count", count); params.add("page", page); if (only_attentions) { params.add("type", 0); } else { params.add("type", 1); } request( SERVER_URL_PRIX + "/friends_timeline.json", params, HTTPMETHOD_GET, listener); } /** * 获取某个用户的位置动态 * * @param uid 需要查询的用户ID。 * @param since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。 * @param max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0。 * @param count 单页返回的记录条数,最大为50,默认为20。 * @param page 返回结果的页码,默认为1。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void userTimeline( long uid, long since_id, long max_id, int count, int page, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("uid", uid); params.add("since_id", since_id); params.add("max_id", max_id); params.add("count", count); params.add("page", page); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/user_timeline.json", params, HTTPMETHOD_GET, listener); } /** * 获取某个位置地点的动态 * * @param poiid 需要查询的POI点ID。 * @param since_id 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。 * @param max_id 若指定此参数,则返回ID小于或等于max_id的微博,默认为0。 * @param count 单页返回的记录条数,最大为50,默认为20。 * @param page 返回结果的页码,默认为1。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void poiTimeline( String poiid, long since_id, long max_id, int count, int page, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("poiid", poiid); params.add("since_id", since_id); params.add("max_id", max_id); params.add("count", count); params.add("page", page); if (base_app) { params.add("base_app", 0); } else { params.add("base_app", 1); } request( SERVER_URL_PRIX + "/poi_timeline.json", params, HTTPMETHOD_GET, listener); } /** * 获取某个位置周边的动态 * * @param lat 纬度。有效范围:-90.0到+90.0,+表示北纬。 * @param lon 经度。有效范围:-180.0到+180.0,+表示东经。 * @param range 搜索范围,单位米,默认2000米,最大11132米。 * @param starttime 开始时间,Unix时间戳。 * @param endtime 结束时间,Unix时间戳。 * @param sort 排序方式。按时间排序或按与中心点距离进行排序。 * @param count 单页返回的记录条数,最大为50,默认为20。 * @param page 返回结果的页码,默认为1。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param offset 传入的经纬度是否是纠偏过,false:没纠偏、true:纠偏过,默认为false。 * @param listener */ public void nearbyTimeline( String lat, String lon, int range, long starttime, long endtime, SORT3 sort, int count, int page, boolean base_app, boolean offset, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("lat", lat); params.add("long", lon); params.add("range", range); params.add("starttime", starttime); params.add("endtime", endtime); params.add("sort", sort.ordinal()); params.add("count", count); params.add("page", page); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } if (offset) { params.add("offset", 1); } else { params.add("offset", 0); } request( SERVER_URL_PRIX + "/nearby_timeline.json", params, HTTPMETHOD_GET, listener); } /** * 根据ID获取动态的详情 * * @param id 需要获取的动态ID。 * @param listener */ public void statusesShow( long id, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("id", id); request( SERVER_URL_PRIX + "/statuses/show.json", params, HTTPMETHOD_GET, listener); } /** * 获取LBS位置服务内的用户信息 * * @param uid 需要查询的用户ID。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void usersShow( long uid, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("uid", uid); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/users/show.json", params, HTTPMETHOD_GET, listener); } /** * 获取用户签到过的地点列表 * * @param uid 需要查询的用户ID。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void usersCheckins( long uid, int count, int page, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("uid", uid); params.add("count", count); params.add("page", page); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/users/checkins.json", params, HTTPMETHOD_GET, listener); } /** * 获取用户的照片列表 * * @param uid 需要查询的用户ID。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void usersPhotos( long uid, int count, int page, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("uid", uid); params.add("count", count); params.add("page", page); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/users/photos.json", params, HTTPMETHOD_GET, listener); } /** * 获取用户的点评列表 * * @param uid 需要查询的用户ID。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void usersTips( long uid, int count, int page, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("uid", uid); params.add("count", count); params.add("page", page); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/users/tips.json", params, HTTPMETHOD_GET, listener); } /** * 获取地点详情 * * @param poiid 需要查询的POI地点ID。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void poisShow( String poiid, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("poiid", poiid); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/pois/show.json", params, HTTPMETHOD_GET, listener); } /** * 获取在某个地点签到的人的列表 * * @param poiid 需要查询的POI地点ID。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void poisUsers( String poiid, int count, int page, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("poiid", poiid); params.add("count", count); params.add("page", page); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/pois/users.json", params, HTTPMETHOD_GET, listener); } /** * 获取地点照片列表 * * @param poiid 需要查询的POI地点ID。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param sort 排序方式,0:按时间、1:按热门,默认为0,目前只支持按时间。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void poisPhotos( String poiid, int count, int page, SORT2 sort, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("uid", poiid); params.add("count", count); params.add("page", page); params.add("sort", sort.ordinal()); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/pois/photos.json", params, HTTPMETHOD_GET, listener); } /** * 获取地点点评列表 * * @param poiid 需要查询的POI地点ID。 * @param count 单页返回的记录条数,默认为20,最大为50 * @param page 返回结果的页码,默认为1。 * @param sort 排序方式,0:按时间、1:按热门,默认为0,目前只支持按时间。 * @param base_app 是否只获取当前应用的数据。false为否(所有数据),true为是(仅当前应用),默认为false。 * @param listener */ public void poisTips( String poiid, int count, int page, SORT2 sort, boolean base_app, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("poiid", poiid); params.add("count", count); params.add("page", page); params.add("sort", sort.ordinal()); if (base_app) { params.add("base_app", 1); } else { params.add("base_app", 0); } request( SERVER_URL_PRIX + "/pois/tips.json", params, HTTPMETHOD_GET, listener); } /** * 按省市查询地点 * * @param keyword 查询的关键词 * @param city 城市代码,默认为全国搜索。 * @param category 查询的分类代码,取值范围见:分类代码对应表。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param listener */ public void poisSearch( String keyword, String city, String category, int count, int page, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("keyword", keyword); params.add("city", city); params.add("category", category); params.add("count", count); params.add("page", page); request( SERVER_URL_PRIX + "/pois/search.json", params, HTTPMETHOD_GET, listener); } /** * 获取地点分类 * * @param pid 父分类ID,默认为0。 * @param returnALL 是否返回全部分类,false:只返回本级下的分类,true:返回全部分类,默认为false。 * @param listener */ public void poisCategory( int pid, boolean returnALL, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("pid", pid); if (returnALL) { params.add("flag", 1); } else { params.add("flag", 0); } request( SERVER_URL_PRIX + "/pois/category.json", params, HTTPMETHOD_GET, listener); } /** * 获取附近地点 * * @param lat 纬度,有效范围:-90.0到+90.0,+表示北纬。 * @param lon 经度,有效范围:-180.0到+180.0,+表示东经。 * @param range 查询范围半径,默认为2000,最大为10000,单位米。 * @param q 查询的关键词 * @param category 查询的分类代码,取值范围见:分类代码对应表。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param offset 传入的经纬度是否是纠偏过,false:没纠偏、true:纠偏过,默认为false。 * @param listener */ public void nearbyPois( String lat, String lon, int range, String q, String category, int count, int page, boolean offset, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("lat", lat); params.add("long", lon); params.add("range", range); params.add("q", q); params.add("category", category); params.add("count", count); params.add("page", page); if (offset) { params.add("offset", 1); } else { params.add("offset", 0); } request( SERVER_URL_PRIX + "/nearby/pois.json", params, HTTPMETHOD_GET, listener); } /** * 获取附近发位置微博的人 * * @param lat 纬度,有效范围:-90.0到+90.0,+表示北纬。 * @param lon 经度,有效范围:-180.0到+180.0,+表示东经。 * @param range 查询范围半径,默认为2000,最大为11132,单位米。 * @param starttime 开始时间,Unix时间戳。 * @param endtime 结束时间,Unix时间戳。 * @param sort 排序方式,0:按时间、1:按距离,默认为0。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param offset 传入的经纬度是否是纠偏过,false:没纠偏、true:纠偏过,默认为false。 * @param listener */ public void nearbyUsers( String lat, String lon, int range, long starttime, long endtime, SORT3 sort, int count, int page, boolean offset, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("lat", lat); params.add("long", lon); params.add("range", range); params.add("starttime", starttime); params.add("endtime", endtime); params.add("sort", sort.ordinal()); params.add("count", count); params.add("page", page); if (offset) { params.add("offset", 1); } else { params.add("offset", 0); } request( SERVER_URL_PRIX + "/nearby/users.json", params, HTTPMETHOD_GET, listener); } /** * 获取附近照片 * * @param lat 纬度,有效范围:-90.0到+90.0,+表示北纬。 * @param lon 经度,有效范围:-180.0到+180.0,+表示东经。 * @param range 查询范围半径,默认为500,最大为11132,单位米。 * @param starttime 开始时间,Unix时间戳。 * @param endtime 结束时间,Unix时间戳。 * @param sort 排序方式,0:按时间、1:按距离,默认为0。 * @param count 单页返回的记录条数,默认为20,最大为50。 * @param page 返回结果的页码,默认为1。 * @param offset 传入的经纬度是否是纠偏过,false:没纠偏、true:纠偏过,默认为false。 * @param listener */ public void nearbyPhotos( String lat, String lon, int range, long starttime, long endtime, SORT3 sort, int count, int page, boolean offset, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("lat", lat); params.add("long", lon); params.add("range", range); params.add("starttime", starttime); params.add("endtime", endtime); params.add("sort", sort.ordinal()); params.add("count", count); params.add("page", page); if (offset) { params.add("offset", 1); } else { params.add("offset", 0); } request( SERVER_URL_PRIX + "/nearby/photos.json", params, HTTPMETHOD_GET, listener); } /** * 签到同时可以上传一张图片 * * @param poiid 需要签到的POI地点ID。 * @param status 签到时发布的动态内容,内容不超过140个汉字 * @param pic 需要上传的图片路径,仅支持JPEG、GIF、PNG格式,图片大小小于5M。例如:/sdcard/pic.jgp;注意:pic不能为网络图片 * @param isPublic 是否同步到微博,默认为不同步。 * @param listener */ public void poisAddCheckin( String poiid, String status, String pic, boolean isPublic, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("poiid", poiid); params.add("status", status); params.add("pic", pic); if (isPublic) { params.add("public", 1); } else { params.add("public", 0); } request( SERVER_URL_PRIX + "/pois/add_checkin.json", params, HTTPMETHOD_POST, listener); } /** * 添加照片 * * @param poiid 需要添加照片的POI地点ID。 * @param status 签到时发布的动态内容,内容不超过140个汉字。 * @param pic 需要上传的图片,仅支持JPEG、GIF、PNG格式,图片大小小于5M。例如:/sdcard/pic.jgp;注意:pic不能为网络图片 * @param isPublic 是否同步到微博,默认为不同步。 * @param listener */ public void poisAddPhoto( String poiid, String status, String pic, boolean isPublic, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("poiid", poiid); params.add("status", status); params.add("pic", pic); if (isPublic) { params.add("public", 1); } else { params.add("public", 0); } request( SERVER_URL_PRIX + "/pois/add_photo.json", params, HTTPMETHOD_POST, listener); } /** * 添加点评 * * @param poiid 需要点评的POI地点ID。 * @param status 点评时发布的动态内容,内容不超过140个汉字。 * @param isPublic 是否同步到微博,默认为不同步。 * @param listener */ public void poisAddTip( String poiid, String status, boolean isPublic, RequestListener listener) { WeiboParameters params = new WeiboParameters(); params.add("poiid", poiid); params.add("status", status); if (isPublic) { params.add("public", 1); } else { params.add("public", 0); } request( SERVER_URL_PRIX + "/pois/add_tip.json", params, HTTPMETHOD_POST, listener); } }