RoR Prog
RoR Prog

Reputation: 84

How to post on linkedin from rails app?

is it possible to post in linkedin through ruby on rails application. If so kindly guide me how to go for it.

I googled a lot but didnt get any correct solution that works.

My Code is as follows.

for controller,

require 'rubygems'
require 'linkedin'
class AuthController < ApplicationController

def index
 LinkedIn.configure do |config|
  config.token = "somekey"
  config.secret = "somesecret"
end

LINKEDIN_CONFIGURATION = { :site => 'https://api.linkedin.com',
                    :authorize_path => '/uas/oauth/authenticate',
                    :request_token_path =>'/uas/oauth/requestToken?scope=r_basicprofile+r_emailaddress+r_network+r_contactinfo',
                    :access_token_path => '/uas/oauth/accessToken' }
client = LinkedIn::Client.new("some_key", "some_secret",  LINKEDIN_CONFIGURATION )
request_token = client.request_token(:oauth_callback => 
                              "http://#{request.host_with_port}/auth/callback")
session[:rtoken] = request_token.token # request token
session[:rsecret] = request_token.secret # request secret
redirect_to client.request_token.authorize_url
end

def create
   @user = User.find_or_create_from_auth_hash(auth_hash)
   self.current_user = @user
   redirect_to '/'
end

 protected
  def auth_hash
   request.env['omniauth.auth']
  end

def callback
 if session[:atoken].nil?
  pin = params[:oauth_verifier]
  atoken, asecret = client.authorize_from_request(session[:rtoken], session[:rsecret], pin)
  session[:atoken] = atoken # authentication token
  session[:asecret] = asecret # authentication secret
 else
  client.authorize_from_access(session[:atoken], session[:asecret])
 end
 @profile = client.profile(:fields => [:first_name]).first_name
 @profiles = client.profile(:fields => [:last_name]).last_name  
 @positions = client.profile(:fields => %w(positions)).positions
 @headline = client.profile(:fields => [:headline]).headline
 @educations = client.profile(:fields => [:educations]).educations
 @post = client.add_share({:comment => "blah"})
@user = client.profile(:fields => %w(positions))
@companies = @user.positions.all.map{|t| t.company}
# And if you want the most recent company it can be accessed via companies[0]
 end
end

config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
provider :linkedin, "some_key", "some_secret", :scope => 'r_fullprofile  r_emailaddress r_network', :fields => ["id", "email-address", "first-name", "last-name", "headline", "industry", "picture-url", "public-profile-url", "location", "connections"]
end

in views,

Headline : <%= @headline %>
</br>
Name : <%= @profile %> <%= @profiles %>
<%= @positions %>
<%= @post %>
<%= @user %>
<%= @educations %>
<%= @companies %>
</br>
<br/>
WELCOME !!!
You have successfully logged in to  through Your LinkedIn Profile !!!

Upvotes: 0

Views: 1350

Answers (1)

Kamyar Mohager
Kamyar Mohager

Reputation: 709

What do you mean by post? What exactly are you trying to post? I'm assuming you're looking to post network updates from your application. In that case, you'll need to grant your app "rw_nus" permissions. Just tack that member permission to your :request_token_path

:request_token_path =>'/uas/oauth/requestToken?scope=r_basicprofile+r_emailaddress+r_network+r_contactinfo+rw_nus'

Upvotes: 1

Related Questions