在 Ruby on Rails 中获取地址簿以获取 Gmail、Yahoo、Hotmail、Twitter 和 Facebook 联系人列表的问题 [英] Issues in fetching address book to fetch Gmail, Yahoo, Hotmail, Twitter and Facebook contact list in Ruby on Rails

查看:17
本文介绍了在 Ruby on Rails 中获取地址簿以获取 Gmail、Yahoo、Hotmail、Twitter 和 Facebook 联系人列表的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在搜索时遇到了 Contacts 插件.

Came across the Contacts plugin while searching.

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

But as per the usage, described in the readme file. It requires username and password to fetch contacts. But that's not a good approach.

推荐答案

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

Mini FB plugin for Facebook login. It also allows me to fetch users contacts. So I can use this one for Facebook. Koala is another solution for fetching facebook friends

脸书更新

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

Here i got the solution for facebook, but i it just show me invite friends for 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 开发者指南,我们有一个部分检索所有联系人",但中间有一行写成ie:-

From google developers guide, we have a section "Retrieving all contacts", But in between there is a line written 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 联系人的另一种服务器端解决方案:谷歌解决方案:

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

Get your client_id and client_secret from here. This is rough script, which works perfectly fine. Modified it as per your needs.

    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

设置屏幕截图.

这篇关于在 Ruby on Rails 中获取地址簿以获取 Gmail、Yahoo、Hotmail、Twitter 和 Facebook 联系人列表的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆