开发者

Issues in fetching address book to fetch Gmail, Yahoo, Hotmail, Twitter and Facebook contact list in Ruby on Rails [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 10 years ago.

Came across the Contacts plugin while searching.

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


For Gmail or for your specific purpose: Gmail Contacts.

For Yahoo contacts, as far as I know, Contacts seems to be the one that is used. If someone has a better alternative. Please do mention.

For Twitter, I would highly recommend the Twitter gem.

For Facebook, you already got your Facebook gem sorted. However, I personally use FB Graph.

Edit:

Hmm, I tried having a look at the doc. No examples mentioned. Although it does mention:

See sample/authsub.rb for an example which uses GmailContacts

Which is nowhere to be found. Perhaps a quick email to the author might help?

It also seems that the the Contacts gem is quite well documented online. If you can find a way to work it out with your project requirements. Then you can use this as a universal solution for other email providers.

Alternatively, another way for contacts retrieval, I found this which can be useful.


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 UPDATE

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 Update

From google developers guide, we have a section "Retrieving all contacts", But in between there is a line written ie:-

Note: Retrieving another user's contacts is not supported by the current version of the 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);

Another sever side solution for google contacts: Solution for google:

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

Screenshot for settings.

Issues in fetching address book to fetch Gmail, Yahoo, Hotmail, Twitter and Facebook contact list in Ruby on Rails [closed]


For Gmail rather than using any gem, you should use a sample code, it's not a worth the gem.

See my sample code here - https://gist.github.com/742461

Actually had a blog post here - http://rtdptech.com/2010/12/importing-gmail-contacts-list-to-rails-application/ but seems current it is facing redirection issues.


You'll need to keep track of which user's have invited who, via a join table. Here's the FB.ui JS w/ callback to get you started:

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"
      }
    });
  }
});
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜