【问题标题】:Google+ and facebook api/rss feed like twitter api feedGoogle+ 和 facebook api/rss 提要,例如 twitter api 提要
【发布时间】:2012-08-24 14:08:17
【问题描述】:

我搜索了很多,我也可以在 StackOverflow 中看到一些与我相同的问题,但没有得到答案。

我需要获取用户(google+ 和 facebook)在他/她的帐户下发布的任何消息,并将其作为 xml 响应提供给移动应用程序,该应用程序将用户帖子显示为更好的格式/设计 - 所以在这里我需要使用 profile-id/username 从 google+/facebook 获取帖子。

例如:就像从 twitter 一样,我可以从

看到状态

https://api.twitter.com/1/statuses/user_timeline.xml?include_entities=true&include_rts=true&screen_name=screenname&count=2

是否有任何图书馆或任何特定的方式可以让我得到它?

提前致谢。

【问题讨论】:

    标签: facebook feed google-plus


    【解决方案1】:

    我只能使用 Facebook 和 Twitter,因为它们是我使用的仅有的两个社交媒体 API。

    这两个 API 都是 RESTful 服务。对于 Twitter 和 Facebook,您需要在透视平台上创建应用程序,以便为将通过 RESTful 服务获取数据的应用程序获取 OAuth 令牌。

    对于 FaceBook,您可以使用Graph API explorer 进行开发。这使您无需在 FaceBook 平台上创建应用程序即可进行开发。

    FaceBook 和 Twitter 都有社区驱动的项目,用于以各种语言访问这些 Web 服务。由于您正在为 Android 执行此操作,我假设您希望您的程序在 Java 中获取此数据。

    RestFB 是我对 Java FaceBook 库的推荐

    FacebookClient facebookClient = new DefaultFacebookClient(authToken);
    User facebookUser = facebookClient.fetchObject("me", User.class);
    

    Twitter4j 是一个很棒的 Java Twitter 库

    对于FaceBook,核心概念是一个很好的起点。 有关 Twitter 的更多信息,请参阅overview documentation

    【讨论】:

    • 有足够的库来解析和使用 twitter 状态,但不使用 fb/google+(即使它看起来太难了),我会更深入地研究 fb 以获得应用程序上的提要列表。
    【解决方案2】:

    您可以使用 Google+ 的活动 API。这目前仅限于公开帖子,但应该足以让您入门。配置文件 ID 来自用户的配置文件。您还可以通过其他方式获取此内容,包括搜索 API。

    可以在 Google plus 页面 (https://developers.google.com/+/api/latest/activities) 上找到各种语言的文档和简单示例,下面的 JavaScript 示例可能有助于了解如何一切正常:

    // globals used for auth, showing debugging
    var debug = true;
    var key   = "your api key from https://code.google.com/apis/console";
    
    
    function handleRequestIssue(request){
        // For now, just show the error
        console.log("Error, status:" + request.status + " /  response:" + request.responseText);
    }
    
    function performXHR(URL){
      var objReturn = "";      
      var request = new XMLHttpRequest();
      request.open('GET', URL, false);
      request.send(); // because of "false" above, will block until the request is done 
                      // and status is available. Not recommended, however it works for simple cases.
    
      if (request.status === 200) {
        if (debug) console.log(request.responseText);
        var objReturn = jQuery.parseJSON(request.responseText).items;
    
        if (debug){
          for (value in objReturn){
            console.log(value);
          }
        } 
      }else{
        handleRequestIssue(request);
      }
      return objReturn;
    }
    
    // Gets the activities for a profile
    function getActivities(profileID){
      var activities = null;      
      var URL        = "https://www.googleapis.com/plus/v1/people/" + profileID + "/activities/public?alt=json&key=" + key;
      activities     = performXHR(URL);
      console.log(activities.length);
      return activities;
    }
    

    此时您可以在调试器中查看活动。您总是可以将内容呈现为 div 或其他内容中的 HTML。

    function renderActsComments(activities, identifier, filter){
        var renderMe = "";
        console.log("activities retrieved: " + activities.length);
    
        for (var i=0; i < activities.length; i++) {
          var render = true;
          console.log("trying to do something with an activity: " + i);
          var activity = activities[i];
          if (filter != null && filter.length > 0){
            if (activity.crosspostSource.indexOf(filter) == -1){
              render = false;
            }
          }
    
    
          if (render == true){
            renderMe += "<br/><div class=\"article\"><p>" + activity.title + "</p>";
            console.log(activity.id);
    
            // get comments
            var comments = getCommentsForActivity(activity.id);
            var left = true;
            for (var j=0; j<comments.length; j++){
              if (left){
                left = false;
                renderMe += "<br/><p class=\"speech\">" + comments[j].object.content + "</p>";
                renderMe += "<a href=\"" + comments[j].actor.url + "\">" + comments[j].actor.displayName + "</a>";
                renderMe += "<a href=\"" + comments[j].actor.image.url.replace(/\?.*/, "") + "\">";
                renderMe += " <img border=0 src=\"" + comments[j].actor.image.url + "\"/></a>";
                renderMe += "</p>";
              }else{
                renderMe += "<br/><p class=\"speechAlt\">" + comments[j].object.content + "</p>";
                left = true;
                renderMe += "<p class=\"profileAlt\">";
                renderMe += "<a href=\"" + comments[j].actor.image.url.replace(/\?.*/, "") + "\">";
                renderMe += "<img border=0 src=\"" + comments[j].actor.image.url + "\"/></a>";
                renderMe += "<a href=\"" + comments[j].actor.url + "\"> " + comments[j].actor.displayName + "</a>";
                renderMe += "</p>";
              }
            }
            renderMe += "</div>";
          }
        }
        console.log("I'm done");
    
        document.getElementById(identifier).innerHTML = renderMe;
        return renderMe;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2015-05-28
      • 2013-06-14
      相关资源
      最近更新 更多