diff --git a/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/PageOperations.java b/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/PageOperations.java index 663429b8e..84a411e69 100644 --- a/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/PageOperations.java +++ b/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/PageOperations.java @@ -52,6 +52,21 @@ public interface PageOperations { */ PagedList getAccounts(); + /** + * Retrieves a list of Account objects for the location pages given a parent page. + * Requires "manage_pages" permission. + * @param pageId the parent page Id + */ + PagedList getLocations(String pageId); + + /** + * Retrieves a list of Account objects for the location pages that the authenticated user is an administrator given a parent page id. + * Requires "manage_pages" permission. + * @param pageId the parent page Id + * @param queryParameters parameters to be included in the request. + */ + PagedList getLocations(String pageId, MultiValueMap queryParameters); + /** * Posts a message to a page's feed as a page administrator. * Requires that the application is granted "manage_pages" permission and that the authenticated user be an administrator of the page. diff --git a/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/impl/PageTemplate.java b/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/impl/PageTemplate.java index 9439bc248..ddb5a32a6 100644 --- a/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/impl/PageTemplate.java +++ b/spring-social-facebook/src/main/java/org/springframework/social/facebook/api/impl/PageTemplate.java @@ -52,6 +52,18 @@ public PagedList getAccounts() { requireAuthorization(); return graphApi.fetchConnections("me", "accounts", Account.class); } + + public PagedList getLocations(String pageId) + { + requireAuthorization(); + return graphApi.fetchConnections(pageId, "locations", Account.class); + } + + public PagedList getLocations(String pageId, MultiValueMap queryParameters) + { + requireAuthorization(); + return graphApi.fetchConnections(pageId, "locations", Account.class, queryParameters); + } public String post(String pageId, String message) { requireAuthorization(); diff --git a/spring-social-facebook/src/test/java/org/springframework/social/facebook/api/PageTemplateTest.java b/spring-social-facebook/src/test/java/org/springframework/social/facebook/api/PageTemplateTest.java index 1f09e8e48..76cbc3296 100644 --- a/spring-social-facebook/src/test/java/org/springframework/social/facebook/api/PageTemplateTest.java +++ b/spring-social-facebook/src/test/java/org/springframework/social/facebook/api/PageTemplateTest.java @@ -237,6 +237,19 @@ public void getAccounts() { assertEquals("Page", accounts.get(1).getCategory()); assertEquals("page2AccessToken", accounts.get(1).getAccessToken()); } + + @Test + public void getLocations(){ + mockServer.expect(requestTo("https://graph.facebook.com/214112095464587/locations")) + .andExpect(method(GET)) + .andExpect(header("Authorization", "OAuth someAccessToken")) + .andRespond(withSuccess(jsonResource("place-page-locations"), MediaType.APPLICATION_JSON)); + + PagedList locations = facebook.pageOperations().getLocations("214112095464587"); + assertTrue(locations.size() == 5); + Account page = locations.get(0); + assertEquals("251118525076385", page.getId()); + } @Test public void post_message() throws Exception { diff --git a/spring-social-facebook/src/test/resources/org/springframework/social/facebook/api/place-page-locations.json b/spring-social-facebook/src/test/resources/org/springframework/social/facebook/api/place-page-locations.json new file mode 100644 index 000000000..8a826fbde --- /dev/null +++ b/spring-social-facebook/src/test/resources/org/springframework/social/facebook/api/place-page-locations.json @@ -0,0 +1,55 @@ + { + "category": "Local business", + "category_list": [ + { + "id": "176139629103647", + "name": "Dance Club" + } + ], + "name": "Booooooooof Miramichi", + "id": "251118525076385" + }, + { + "category": "Arts/entertainment/nightlife", + "category_list": [ + { + "id": "176139629103647", + "name": "Dance Club" + } + ], + "name": "Booooooooof Moncton", + "id": "578747338900172" + }, + { + "category": "Arts/entertainment/nightlife", + "category_list": [ + { + "id": "176139629103647", + "name": "Dance Club" + } + ], + "name": "Booooooooof Halifax", + "id": "223991034461281" + }, + { + "category": "Arts/entertainment/nightlife", + "category_list": [ + { + "id": "176139629103647", + "name": "Dance Club" + } + ], + "name": "Booooooooof Saint John", + "id": "432790206855954" + }, + { + "category": "Arts/entertainment/nightlife", + "category_list": [ + { + "id": "176139629103647", + "name": "Dance Club" + } + ], + "name": "Booooooooof Fredericton", + "id": "1384040068504197" + }