【问题标题】:Issues in fetching address book to fetch Gmail, Yahoo, Hotmail, Twitter and Facebook contact list in Ruby on Rails [closed]在 Ruby on Rails 中获取地址簿以获取 Gmail、Yahoo、Hotmail、Twitter 和 Facebook 联系人列表的问题 [关闭]
【发布时间】:2011-06-10 19:23:14
【问题描述】:

搜索时遇到Contacts插件。

但根据自述文件中描述的用法。它需要用户名和密码才能获取联系人。但这不是一个好方法。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rubygems contacts social-networking


    【解决方案1】:

    对于Gmail 或您的特定目的:Gmail Contacts

    据我所知,对于 Yahoo 联系人,Contacts 似乎是使用的联系人。如果有人有更好的选择。请务必提及。

    对于 Twitter,我强烈推荐 Twitter gem。

    对于 Facebook,您已经对 Facebook gem 进行了分类。但是,我个人使用FB Graph

    编辑:

    嗯,我试着看一下文档。没有提到例子。虽然它确实提到:

    查看示例/authsub.rb 示例 它使用 GmailContacts

    这是无处可寻的。也许给作者发一封快速的电子邮件可能会有所帮助?

    似乎Contacts gem 在网上也有很好的记录。如果您能找到一种方法来满足您的项目要求。然后,您可以将其用作其他电子邮件提供商的通用解决方案。

    另外,我发现了另一种联系人检索方式,this 很有用。

    【讨论】:

    • 有没有 gmail 联系人的示例代码。我试过但没有得到任何东西。
    【解决方案2】:

    Mini FB plugin 用于 Facebook 登录。它还允许我获取用户联系人。所以我可以将这个用于 Facebook。 Koala 是另一种获取 facebook 好友的解决方案

    脸书更新

    我在这里找到了 facebook 的解决方案,但它只是告诉我邀请朋友使用 facebook

        <div id="facebook_invites" class="conclusion" style="width: 750px; text-align: center">
          <a id="wall_post" href="#" style="font-size: 2em;">Post on your Wall</a><br/>
          <a id="invite_friends" href="#" style="font-size: 1.5em;">Invite your Friends</a>
          </div>
            <div id="fb-root"></div>
    
    
          <script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
            <script type="text/javascript">
              $('#wall_post').click(function() {
                FB.init({
                  appId:'app_id', cookie:true,
                  status:true, xfbml:true
                });
    
                FB.ui({ method: 'feed',
                  link: 'http://localhost:3000/',
                  picture: 'http://localhost:3000/',
                  description: 'abc is cool.',
                  name: 'abc.com'});
              });
    
              $('#invite_friends').click(function() {
                FB.init({
                  appId:'app_id', cookie:true,
                  status:true, xfbml:true
                });
    
                FB.ui({ method: 'apprequests',
                  message: 'abc is cool.'});
              });
            </script>
    


    谷歌更新

    google developers guide,我们有一个“检索所有联系人”部分,但中间有一行写成ie:-

    注意:当前版本的 Contacts API 不支持检索其他用户的联系人。

       /*
        * Retrieve all contacts
        */
    
        // Create the contacts service object
        var contactsService =
           new google.gdata.contacts.ContactsService('GoogleInc-jsguide-1.0');
    
        // The feed URI that is used for retrieving contacts
        var feedUri = 'http://www.google.com/m8/feeds/contacts/default/full';
        var query = new google.gdata.contacts.ContactQuery(feedUri);
    
        // Set the maximum of the result set to be 50
        query.setMaxResults(50);
    
        // callback method to be invoked when getContactFeed() returns data
        var callback = function(result) {
    
         // An array of contact entries
         var entries = result.feed.entry;
    
         // Iterate through the array of contact entries
         for (var i = 0; i < entries.length; i++) {
           var contactEntry = entries[i];
    
           var emailAddresses = contactEntry.getEmailAddresses();
    
           // Iterate through the array of emails belonging to a single contact entry
           for (var j = 0; j < emailAddresses.length; j++) {
             var emailAddress = emailAddresses[j].getAddress();
             PRINT('email = ' + emailAddress);
           }    
         }
        }
    
        // Error handler
        var handleError = function(error) {
         PRINT(error);
        }
    
        // Submit the request using the contacts service object
        contactsService.getContactFeed(query, callback, handleError);
    

    Google 联系人的另一种服务器端解决方案: 谷歌解决方案:

    here 获取您的 client_id 和 client_secret。这是一个粗略的脚本,效果很好。根据您的需要对其进行修改。

        require 'net/http'
        require 'net/https'
        require 'uri'
        require 'rexml/document'
    
        class ImportController < ApplicationController
    
          def authenticate
            @title = "Google Authetication"
    
            client_id = "xxxxxxxxxxxxxx.apps.googleusercontent.com"
            google_root_url = "https://accounts.google.com/o/oauth2/auth?state=profile&redirect_uri="+googleauth_url+"&response_type=code&client_id="+client_id.to_s+"&approval_prompt=force&scope=https://www.google.com/m8/feeds/"
            redirect_to google_root_url
          end
    
          def authorise
            begin
              @title = "Google Authetication"
              token = params[:code]
              client_id = "xxxxxxxxxxxxxx.apps.googleusercontent.com"
              client_secret = "xxxxxxxxxxxxxx"
              uri = URI('https://accounts.google.com/o/oauth2/token')
              http = Net::HTTP.new(uri.host, uri.port)
              http.use_ssl = true
              http.verify_mode = OpenSSL::SSL::VERIFY_NONE
              request = Net::HTTP::Post.new(uri.request_uri)
    
              request.set_form_data('code' => token, 'client_id' => client_id, 'client_secret' => client_secret, 'redirect_uri' => googleauth_url, 'grant_type' => 'authorization_code')
              request.content_type = 'application/x-www-form-urlencoded'
              response = http.request(request)
              response.code
              access_keys = ActiveSupport::JSON.decode(response.body)
    
              uri = URI.parse("https://www.google.com/m8/feeds/contacts/default/full?oauth_token="+access_keys['access_token'].to_s+"&max-results=50000&alt=json")
    
              http = Net::HTTP.new(uri.host, uri.port)
              http.use_ssl = true
              http.verify_mode = OpenSSL::SSL::VERIFY_NONE
              request = Net::HTTP::Get.new(uri.request_uri)
              response = http.request(request)
              contacts = ActiveSupport::JSON.decode(response.body)
              contacts['feed']['entry'].each_with_index do |contact,index|
    
                 name = contact['title']['$t']
                 contact['gd$email'].to_a.each do |email|
                  email_address = email['address']
                  Invite.create(:full_name => name, :email => email_address, :invite_source => "Gmail", :user_id => current_user.id)  # for testing i m pushing it into database..
                end
    
              end  
            rescue Exception => ex
               ex.message
            end
            redirect_to root_path , :notice => "Invite or follow your Google contacts."
    
    
          end
    
        end
    

    设置屏幕截图。

    【讨论】:

      【解决方案3】:

      对于 Gmail,而不是使用任何 gem,您应该使用示例代码,这不值得 gem。

      在此处查看我的示例代码 - https://gist.github.com/742461

      实际上这里有一篇博文 - http://rtdptech.com/2010/12/importing-gmail-contacts-list-to-rails-application/,但目前看来它正面临重定向问题。

      【讨论】:

        【解决方案4】:

        您需要通过联接表跟踪哪些用户邀请了谁。这是带回调的 FB.ui JS,可帮助您入门:

        FB.ui({
            method: 'apprequests',
            title: t,
            message: m
        },
        function(response) {
          if (response) {
            $.ajax({
              type: 'POST',
              url: "/invitation_requests/create",
              data: { "requests[]" : response.request_ids },
              timeout: 12500,
              async : false, // This fixes an issue w/ IE
              complete: function() {
                $.cookie( "latest_request_ids", response.request_ids.length );
                window.location = "/users"
              }
            });
          }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-26
          • 2010-11-03
          • 1970-01-01
          相关资源
          最近更新 更多