How to post user generated photos to Facebook using Koala? - ruby-on-rails

I'm using the Koala gem in a Rails 3.2 app.
I'm trying to post an action that includes a user generated photo to a Facebook application. According to FB's docs, the url I need to post to is:
https://graph.facebook.com/uid/namespace:action?object=http://path/to/page&image[0][url]=http://path/to/image.jpg&image[0][user_generated]=true
If I test this manually using Facebook's debugger, it works perfectly. But I'm having trouble achieving this with Koala.
I'm using the following method:
Koala::Facebook::API.new(app_token).put_connections( uid, namepsace:action, url )
If I use:
url = "http://path/to/page"
then the action is posted to Facebook correctly, but without the user generated photo.
If I use:
url = "http://path/to/page&image[0][url]=http://path/to/image.jpgimage[0][user_generated]=true"
I receive an error in the logs
#<Koala::Facebook::APIError: OAuthException: (#3502) Object at URL http://path/to/page&image[0][url]=http://path/to/image.jpg&image[0][user_generated]=true has og:type of 'website'. The property 'object' requires an object of og:type 'namespace:object'. (http response code: 404)>
What is the correct way to construct the required post url using Koala? Or what is a good approach to begin debugging my current code? Or am I totally on the wrong track with this?

I struggled a ton with this too, both because of Facebook's documentation and Koala's which are not super clear in my opinion:
Koala::Facebook::API.new(access_token).put_connections(
uid,
"namespace:action",
"product" => "[URL_TO_PRODUCT]",
"image[0][user_generated]" => true,
"image[0][url]" => "[URL_TO_USER_GENERATED_IMAGE]",
"fb:explicitly_shared" => true,
"message" => "[DESCRIPTION]"
)
The other thing was that the target URL had to have og:type="namespace:product"
Hope this helps

Have you checked your url in Facebook Debugger?
http://developers.facebook.com/tools/debug
From error message you got it looks like you should set og:type to namespace:object and to get custom image you should set og:image to http://your.domain.com/path/to/user/generated/image

I was using put_connections, like you, but it's not necessary, you can use the method put_wall_post.
I asked for the permission: publish_actions.
And in my Controller's method I have:
api = Koala::Facebook::API.new(#oauth_token)
api.put_wall_post("Testing post on Timeline", {
:name => "Im a wall post",
:link => "http://www.example.com",
:caption => "Im a caption",
:description => "Im a long description of an attachment",
:picture => "http://www.example.com/picture.jpg"
}, #users_facebook_id)
With this, you can post to the user's Timeline, having an image, a description, etc.

Related

How do I post an image using Koala gem?

I'm using the Koala gem to post images to the Facebook wall with the put_object method. The problem I'm having is that the images show up as thumbnails on the wall (with a caption) instead of the larger image that I'm expecting. When you click on the thumbnail, I'm expecting the photo to pop open in Facebook's photo viewer, but it simply directs me to the URL of the image I specified. This seems more like the behavior I'd expect when posting a link to the wall. I've also tried using post_picture with no success. Here is a screenshot of what I'm expecting: http://cl.ly/image/472a2H333z13
My stream permissions include the following:
read_stream,offline_access,manage_pages,publish_stream,create_event,rsvp_event,sms,user_photos,friends_about_me,friends_status,friends_activities,friends_likes,friends_interests,read_insights,friends_photos
The following code works but not as expected - here is a screenshot of how an image posted in using put_object appears on the timeline: http://cl.ly/image/1x3X1K0k2l2D
put_object('me', 'feed', :message => 'this is the message', :name => 'this is the caption', :picture => 'http://www.socialvolt.com/img/producttour/listen.png', :source => 'http://www.socialvolt.com/img/producttour/ssPublish.jpg')
This code doesn't work at all:
put_picture('me', 'feed', :message => 'this is the message', :name => 'this is the caption', :picture => 'http://www.socialvolt.com/img/producttour/listen.png', :source => 'http://www.socialvolt.com/img/producttour/ssPublish.jpg')
I also can't find any difference between :picture and :source.
Can anyone help me figure out what I'm doing wrong?
Here is the code.
graph = Koala::Facebook::API.new(cookies[:acess_token])
begin
graph.put_picture(
"https://dl.dropboxusercontent.com/u/71317935/banners/coy_copper.jpg",
"image/png",
{:message => "introduces Some information"}
)
rescue Exception => e
render :text => e.message and return
end
Off the top of my head, you may need a larger photo. More specifically, I think the width needs to be at least 480px.
The images in your code seem to be less than 480px:
http://www.socialvolt.com/img/producttour/listen.png
http://www.socialvolt.com/img/producttour/ssPublish.jpg
This comes from experience with User Generated Photos. You're not really using Open Graph Actions, so I have no idea if Facebook applies the same rules for this to generic photo uploads.

Am I posting to Facebook correctly?

Anyone use the Koala gem to post on a Facebook wall before? I am able to post fine (with the picture displayed), but can't seem to have the "share" link on the actual wall post. "Like" and "Comment" appear though.
I have the following:
client = Koala::Facebook::API.new(user.token)
options = {
:message => "Message here",
:description => "Description here",
:link => "http://#{APP_CONFIG['host']}/foobars/1",
:picture => "#{photo.url}"
}
client.put_object(user.facebook_uid, 'feed', options)
Am I missing something in options? Would anyone like to share their experience?
Seems to work by changing feed to links:
client.put_object(user.facebook_uid, 'links', options)

Create record example for Quickbooks Online and Intuit Anywhere using Ruby and httparty?

Can someone post an example of creating a record in quickbooks online / intuit anywhere, using ruby and httparty?
I am working on an integration to a ruby on rails app using intuit anywhere, and am running into an issue with my POST request when attempting to create a new record. I have been able to successfully retrieve data (customers) using a POST command that doesn't require XML data in the body of the request, but am running into trouble when trying to create new records that have required fields that need to be passed in XML in the body of the request.
I get the same flavor of error in any entity for which I try to create a record for: an invalid or missing required field. It seems to me that the XML in the body (where the data for the required fields is added) is either being ignored (incorrect formatting?) or is not being attached.
I was hoping the someone else familiar with ruby could post an example of a record creation using httparty. If I could see how to correctly pass the XML using httparty, I can fix my problem myself.
I have been using the customer.com example (https://code.intuit.com/integration/viewvc/viewvc.cgi/IntuitAnywhere-Ruby/customer.com/?root=intuitanywhere&system=exsy1003) mostly as posted, with a few irrelevant modifications needed to get it to work in Rails 3.1. I am using the data pull and handling provided in the example, which looks like a pretty standard API wrapper built using httparty.
I am using a pull similar to the one found in the company_controller customers method. Here are two different ways I have tried submitting the XML:
#########################################
#Example 1 - XML
e = #company.intuit_token.post("https://qbo.intuit.com/qbo1/resource/account/v2/#{#company.realm}",
{ :body =>
"<Account xmlns:ns2=\"http://www.intuit.com/sb/cdm/qbo\" xmlns=\"http://www.intuit.com/sb/cdm/v2\">
<Name>Test Account 2</Name>
<Desc>Test Account</Desc>
<Subtype>Savings</Subtype>
<AcctNum>5001</AcctNum>
<OpeningBalanceDate>2010-05-14</OpeningBalanceDate>
</Account>",
:headers => {
"Content-Type" => "application/xml"
}}
)
#########################################
#Example 2 - hash
e = #company.intuit_token.post("https://qbo.intuit.com/qbo1/resource/account/v2/#{#company.realm}",
{ :body => {
:Account => {
:Name => "Loan Account 2",
:Desc => "Loac Account 2",
:Subtype => "Savings",
:AcctNum => "5001",
:OpeningBalanceDate => "2011-04-22"
}
},
:headers => {
"Content-Type" => "application/xml"
}}
)
I incorrectly assumed the customer.com example provided by intuit was using the httparty gem to make the POST call, so I was using the wrong syntax. They are actually using the OAuth gem's POST call, who's syntax can be found here: http://oauth.rubyforge.org/rdoc/classes/OAuth/AccessToken.html
I also had to modify the headers to get the Intuit Anywhere service to accept the XML body. Here is the code that finally worked for me to create a record in quickbooks online using intuit anywhere:
e = #company.intuit_token.post("https://qbo.intuit.com/qbo1/resource/account/v2/#{#company.realm}", "<Account xmlns:ns2=\"http://www.intuit.com/sb/cdm/qbo\" xmlns=\"http://www.intuit.com/sb/cdm/v2\"><Name>Test Account </Name><Desc>Test Account</Desc><Subtype>Savings</Subtype><AcctNum>5002</AcctNum><OpeningBalanceDate>2010-05-14</OpeningBalanceDate></Account>", {"Content-Type" => "application/xml", "standalone" => "yes", "encoding" => "UTF-8"})

mini fb posting to friend's wall using graph api

Hi I have read all the other post relating to this but I think I am missing something fundamental. I am using mini_fb in my ruby on rails application for handling the facebook api. I have the following code:
current_user.session.post('me', :type => :feed, :params => {:name => "name",
:to => "{\"data\":[{\"name\":\"#{friend.facebook_name}\",\"id\":\"#{friend.facebook_id}\"}]}",
:link => url_of_app,
:description => "desc",
:actions => "{\"name\": \"action name\", \"link\": \"url\"}"})
The above posts to the current user's wall with or without the "to" parameter set. Everything works, except for the "to" parameter. I have read the graph post to wall over and over again and I can't figure out what is wrong with this code of mine. I would really appreciate it if someone could point out my mistake.
I've never used ruby's version, but probably the problem is in the first parameter. You are targeting 'me' feed, while should be targeting your friends feed. Try fetching your friend id and doing something like
current_user.session.post(friend.facebook_id, :type => :feed, :params => ...)
Wow, mini_fb looks so verbose :)
Telémako is right, you need to use your friends id. I give you another alternative for more nice code. Use Koala.
https://github.com/arsduo/koala/wiki/Graph-API
#graph.put_wall_post("explodingdog!", {:name => "i love loving you", :link => "http://www.explodingdog.com/title/ilovelovingyou.html"}, "tmiley")
=> {"id"=>"83901496_520908898070"}
I use it in my projects and works very well.

403 Error when Authenticating using tumblr gem for rails application

I have a ruby-on-rails application that wishes to utilise the tumblr gem for adding posts when an action is taken (eg: creating a blog post)
I currently have the tumblr gem installed and can manage to fetch my posts using
#tumblruser = Tumblr::User.new('myemail','mypassword')
However when i go to add a post where it asks me to pass the user information like so (according to the API for the gem)
post = Tumblr::Post.create(#tumblruser, :type => 'video', :embed => #post.video_html, :title => #post.title, :caption => #post.content)
it just does not want to authenticate and returns a 403 error
anyone had any experience with this?
NEW SOLUTION:
I have found recently that there has been a problem with the gem. So I have made a copy of it, changed a few things in the docs and code and put it at http://rubygems.org/gems/matenia-tumblr-api
Hope the changes and docs help someone else out there.
As always I welcome any improvements, or refactoring on any of my projects.
Kind Regards,
Matenia
OLD ANSWER BELOW
I managed to get around this by the way ... all i did was declare the username and password in place of #tumblruser like so:
post = Tumblr::Post.create(:email => 'user name email here',
:password => 'my password',
:type => 'video',
:embed => #post.video_html,
:caption => #postcontent)
where #postcontent is the html text of post.content and gsubbed to escape most of the html.
hope this saves someone else some time.
If you are only going to check authentication with any media like Facebook , Twitter ,LinkedIn ,Tumblr , Github and almost 20 others (you can check Here ) .Then omniauth gem is the first thing that comes to mind . Means It's clearly simplest solution for authentication and I love it

Resources