如何从rails app发布到linkedin?

时间:2012-11-07 08:34:39

标签: post gem ruby-on-rails-3.2 linkedin

是否可以通过ruby on rails应用程序在linkedin中发布。如果是这样,请指导我如何去做。

我搜索了很多但没有得到任何正确的解决方案。

我的守则如下。

对于控制器,

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

配置/初始化/ 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

在观看中,

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

1 个答案:

答案 0 :(得分:1)

你的帖子是什么意思?你究竟想发布什么?我假设您要从您的应用程序发布网络更新。在这种情况下,您需要授予您的应用“rw_nus”权限。只需将该成员权限添加到您的:request_token_path

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