fb_graph 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +49 -0
  6. data/VERSION +1 -0
  7. data/fb_graph.gemspec +107 -0
  8. data/lib/fb_graph/connections/collection.rb +31 -0
  9. data/lib/fb_graph/connections/feed.rb +9 -0
  10. data/lib/fb_graph/connections/home.rb +9 -0
  11. data/lib/fb_graph/connections/likes.rb +12 -0
  12. data/lib/fb_graph/connections/picture.rb +14 -0
  13. data/lib/fb_graph/connections/posts.rb +15 -0
  14. data/lib/fb_graph/connections/statuses.rb +12 -0
  15. data/lib/fb_graph/connections/tagged.rb +9 -0
  16. data/lib/fb_graph/connections.rb +6 -0
  17. data/lib/fb_graph/node.rb +62 -0
  18. data/lib/fb_graph/page.rb +14 -0
  19. data/lib/fb_graph/post.rb +39 -0
  20. data/lib/fb_graph/status.rb +18 -0
  21. data/lib/fb_graph/user.rb +31 -0
  22. data/lib/fb_graph.rb +26 -0
  23. data/spec/fake_json/pages/platform_private.json +13 -0
  24. data/spec/fake_json/pages/platform_public.json +13 -0
  25. data/spec/fake_json/pages/statuses/platform_private.json +258 -0
  26. data/spec/fake_json/pages/statuses/platform_public.json +6 -0
  27. data/spec/fake_json/users/arjun_private.json +99 -0
  28. data/spec/fake_json/users/arjun_public.json +7 -0
  29. data/spec/fake_json/users/home/arjun_private.json +6 -0
  30. data/spec/fake_json/users/home/arjun_public.json +6 -0
  31. data/spec/fake_json/users/home/me_private.json +383 -0
  32. data/spec/fake_json/users/home/me_public.json +6 -0
  33. data/spec/fake_json/users/likes/arjun_private.json +1394 -0
  34. data/spec/fake_json/users/likes/arjun_public.json +6 -0
  35. data/spec/fake_json/users/statuses/arjun_private.json +233 -0
  36. data/spec/fake_json/users/statuses/arjun_public.json +6 -0
  37. data/spec/fb_graph/connections/collection_spec.rb +15 -0
  38. data/spec/fb_graph/connections/home_spec.rb +38 -0
  39. data/spec/fb_graph/connections/likes_spec.rb +33 -0
  40. data/spec/fb_graph/connections/picture_spec.rb +29 -0
  41. data/spec/fb_graph/connections/statuses_spec.rb +83 -0
  42. data/spec/fb_graph/node_spec.rb +13 -0
  43. data/spec/fb_graph/page_spec.rb +19 -0
  44. data/spec/fb_graph/user_spec.rb +41 -0
  45. data/spec/fb_graph_spec.rb +13 -0
  46. data/spec/helpers/fake_json_helper.rb +9 -0
  47. data/spec/spec.opts +3 -0
  48. data/spec/spec_helper.rb +18 -0
  49. metadata +155 -0
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 nov matake
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,17 @@
1
+ = fb_graph
2
+
3
+ Description goes here.
4
+
5
+ == Note on Patches/Pull Requests
6
+
7
+ * Fork the project.
8
+ * Make your feature addition or bug fix.
9
+ * Add tests for it. This is important so I don't break it in a
10
+ future version unintentionally.
11
+ * Commit, do not mess with rakefile, version, or history.
12
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
+ * Send me a pull request. Bonus points for topic branches.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2010 nov matake. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = 'fb_graph'
8
+ gem.summary = %Q{Facebook Graph API library for Ruby}
9
+ gem.description = %Q{Facebook Graph API library for Ruby}
10
+ gem.email = 'nov@matake.jp'
11
+ gem.homepage = 'http://github.com/nov/fb_graph'
12
+ gem.authors = ['nov matake']
13
+ gem.add_development_dependency 'json'
14
+ gem.add_development_dependency 'activesupport'
15
+ gem.add_development_dependency 'rest-client'
16
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts 'Jeweler not available. Install it with: gem install jeweler'
21
+ end
22
+
23
+ begin
24
+ require 'spec/rake/spectask'
25
+ Spec::Rake::SpecTask.new(:spec) do |spec|
26
+ spec.fail_on_error = false
27
+ spec.libs << 'lib' << 'spec'
28
+ spec.spec_files = FileList['spec/**/*_spec.rb']
29
+ end
30
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
31
+ spec.libs << 'lib' << 'spec'
32
+ spec.pattern = 'spec/**/*_spec.rb'
33
+ spec.rcov = true
34
+ spec.rcov_opts = ['--exclude spec,gems']
35
+ end
36
+ task :spec => :check_dependencies
37
+ task :default => :spec
38
+ rescue LoadError
39
+ puts 'RSpec not available. Install it with: gem install rspec'
40
+ end
41
+
42
+ require 'rake/rdoctask'
43
+ Rake::RDocTask.new do |rdoc|
44
+ version = File.read('VERSION')
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = 'fb_graph #{version}'
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/fb_graph.gemspec ADDED
@@ -0,0 +1,107 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{fb_graph}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["nov matake"]
12
+ s.date = %q{2010-04-26}
13
+ s.description = %q{Facebook Graph API library for Ruby}
14
+ s.email = %q{nov@matake.jp}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "fb_graph.gemspec",
27
+ "lib/fb_graph.rb",
28
+ "lib/fb_graph/connections.rb",
29
+ "lib/fb_graph/connections/collection.rb",
30
+ "lib/fb_graph/connections/feed.rb",
31
+ "lib/fb_graph/connections/home.rb",
32
+ "lib/fb_graph/connections/likes.rb",
33
+ "lib/fb_graph/connections/picture.rb",
34
+ "lib/fb_graph/connections/posts.rb",
35
+ "lib/fb_graph/connections/statuses.rb",
36
+ "lib/fb_graph/connections/tagged.rb",
37
+ "lib/fb_graph/node.rb",
38
+ "lib/fb_graph/page.rb",
39
+ "lib/fb_graph/post.rb",
40
+ "lib/fb_graph/status.rb",
41
+ "lib/fb_graph/user.rb",
42
+ "spec/fake_json/pages/platform_private.json",
43
+ "spec/fake_json/pages/platform_public.json",
44
+ "spec/fake_json/pages/statuses/platform_private.json",
45
+ "spec/fake_json/pages/statuses/platform_public.json",
46
+ "spec/fake_json/users/arjun_private.json",
47
+ "spec/fake_json/users/arjun_public.json",
48
+ "spec/fake_json/users/home/arjun_private.json",
49
+ "spec/fake_json/users/home/arjun_public.json",
50
+ "spec/fake_json/users/home/me_private.json",
51
+ "spec/fake_json/users/home/me_public.json",
52
+ "spec/fake_json/users/likes/arjun_private.json",
53
+ "spec/fake_json/users/likes/arjun_public.json",
54
+ "spec/fake_json/users/statuses/arjun_private.json",
55
+ "spec/fake_json/users/statuses/arjun_public.json",
56
+ "spec/fb_graph/connections/collection_spec.rb",
57
+ "spec/fb_graph/connections/home_spec.rb",
58
+ "spec/fb_graph/connections/likes_spec.rb",
59
+ "spec/fb_graph/connections/picture_spec.rb",
60
+ "spec/fb_graph/connections/statuses_spec.rb",
61
+ "spec/fb_graph/node_spec.rb",
62
+ "spec/fb_graph/page_spec.rb",
63
+ "spec/fb_graph/user_spec.rb",
64
+ "spec/fb_graph_spec.rb",
65
+ "spec/helpers/fake_json_helper.rb",
66
+ "spec/spec.opts",
67
+ "spec/spec_helper.rb"
68
+ ]
69
+ s.homepage = %q{http://github.com/nov/fb_graph}
70
+ s.rdoc_options = ["--charset=UTF-8"]
71
+ s.require_paths = ["lib"]
72
+ s.rubygems_version = %q{1.3.6}
73
+ s.summary = %q{Facebook Graph API library for Ruby}
74
+ s.test_files = [
75
+ "spec/fb_graph/connections/collection_spec.rb",
76
+ "spec/fb_graph/connections/home_spec.rb",
77
+ "spec/fb_graph/connections/likes_spec.rb",
78
+ "spec/fb_graph/connections/picture_spec.rb",
79
+ "spec/fb_graph/connections/statuses_spec.rb",
80
+ "spec/fb_graph/node_spec.rb",
81
+ "spec/fb_graph/page_spec.rb",
82
+ "spec/fb_graph/user_spec.rb",
83
+ "spec/fb_graph_spec.rb",
84
+ "spec/helpers/fake_json_helper.rb",
85
+ "spec/spec_helper.rb"
86
+ ]
87
+
88
+ if s.respond_to? :specification_version then
89
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
90
+ s.specification_version = 3
91
+
92
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
93
+ s.add_development_dependency(%q<json>, [">= 0"])
94
+ s.add_development_dependency(%q<activesupport>, [">= 0"])
95
+ s.add_development_dependency(%q<rest-client>, [">= 0"])
96
+ else
97
+ s.add_dependency(%q<json>, [">= 0"])
98
+ s.add_dependency(%q<activesupport>, [">= 0"])
99
+ s.add_dependency(%q<rest-client>, [">= 0"])
100
+ end
101
+ else
102
+ s.add_dependency(%q<json>, [">= 0"])
103
+ s.add_dependency(%q<activesupport>, [">= 0"])
104
+ s.add_dependency(%q<rest-client>, [">= 0"])
105
+ end
106
+ end
107
+
@@ -0,0 +1,31 @@
1
+ module FbGraph
2
+ module Connections
3
+ class Collection < Array
4
+ attr_reader :previous, :next
5
+
6
+ def initialize(collection)
7
+ result = replace(collection[:data])
8
+ @previous, @next = {}, {}
9
+ if (paging = collection[:paging])
10
+ if paging[:previous]
11
+ @previous = parse_query(URI.parse(paging[:previous]).query)
12
+ end
13
+ if paging[:next]
14
+ @next = parse_query(URI.parse(paging[:next]).query)
15
+ end
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def parse_query(query)
22
+ params = {}
23
+ query.split('&').each do |q|
24
+ key, value = q.split('=')
25
+ params[key] = value
26
+ end
27
+ params.with_indifferent_access
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ module FbGraph
2
+ module Connections
3
+ module Feed
4
+ def feed(options = {})
5
+ Posts.posts(options.merge(:connection => 'feed', :self => self))
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module FbGraph
2
+ module Connections
3
+ module Home
4
+ def home(options = {})
5
+ Posts.posts(options.merge(:connection => 'home', :self => self))
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ module FbGraph
2
+ module Connections
3
+ module Likes
4
+ def likes(options = {})
5
+ likes = Collection.new(get(options.merge(:connection => 'likes')))
6
+ likes.map! do |like|
7
+ Page.new(like.delete(:id), like)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module FbGraph
2
+ module Connections
3
+ module Picture
4
+ def picture(size = nil)
5
+ _endpoint_ = "#{self.endpoint}/picture"
6
+ if size
7
+ "#{_endpoint_}?type=#{size}"
8
+ else
9
+ _endpoint_
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module FbGraph
2
+ module Connections
3
+ module Posts
4
+ def posts(options = {})
5
+ options[:connection] ||= 'posts'
6
+ __self__ = options.delete(:self) || self
7
+ posts = Collection.new(__self__.send(:get, options))
8
+ posts.map! do |post|
9
+ Post.new(post.delete(:id), post)
10
+ end
11
+ end
12
+ module_function :posts
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module FbGraph
2
+ module Connections
3
+ module Statuses
4
+ def statuses(options = {})
5
+ statuses = Collection.new(get(options.merge(:connection => 'statuses')))
6
+ statuses.map! do |status|
7
+ Status.new(status.delete(:id), status)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module FbGraph
2
+ module Connections
3
+ module Tagged
4
+ def tagged(options = {})
5
+ Posts.posts(options.merge(:connection => 'tagged', :self => self))
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ module Connections
2
+ end
3
+
4
+ Dir[File.dirname(__FILE__) + '/connections/*.rb'].each do |file|
5
+ require file
6
+ end
@@ -0,0 +1,62 @@
1
+ module FbGraph
2
+ class Node
3
+ attr_accessor :identifier, :endpoint, :access_token
4
+
5
+ def ==(other)
6
+ instance_variables.all? do |key|
7
+ instance_variable_get(key) == other.instance_variable_get(key)
8
+ end
9
+ end
10
+
11
+ def initialize(identifier, options = {})
12
+ @identifier = identifier
13
+ @endpoint = File.join(FbGraph::ROOT_URL, identifier)
14
+ @access_token = options[:access_token]
15
+ end
16
+
17
+ def self.fetch(identifier, options = {})
18
+ _fetched_ = new(identifier).send(:get, options)
19
+ new(_fetched_.delete(:id), _fetched_)
20
+ end
21
+
22
+ protected
23
+
24
+ def get(options = {})
25
+ _endpoint_ = build_endpoint(options)
26
+ handle_response RestClient.get(_endpoint_)
27
+ end
28
+
29
+ private
30
+
31
+ def build_endpoint(options = {})
32
+ _endpoint_ = if options[:connection]
33
+ File.join(self.endpoint, options.delete(:connection))
34
+ else
35
+ self.endpoint
36
+ end
37
+ options[:access_token] ||= self.access_token
38
+ _options_ = options.reject do |k, v|
39
+ v.blank?
40
+ end
41
+ _endpoint_ << "?#{_options_.to_query}" unless _options_.blank?
42
+ _endpoint_
43
+ end
44
+
45
+ def handle_response(response)
46
+ _response_ = JSON.parse(response.to_s).with_indifferent_access
47
+ if _response_[:error]
48
+ case _response_[:error][:type]
49
+ when 'OAuthAccessTokenException'
50
+ raise FbGraph::Unauthorized.new(_response_[:error][:message])
51
+ when 'QueryParseException'
52
+ raise FbGraph::NotFound.new(_response_[:error][:message])
53
+ else
54
+ raise FbGraph::Exception.new("#{_response_[:error][:type]} :: #{_response_[:error][:message]}")
55
+ end
56
+ else
57
+ _response_
58
+ end
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,14 @@
1
+ module FbGraph
2
+ class Page < Node
3
+ include Connections::Picture
4
+ include Connections::Statuses
5
+
6
+ attr_accessor :name, :category
7
+
8
+ def initialize(identifier, options = {})
9
+ super
10
+ @name = options[:name]
11
+ @category = options[:category]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,39 @@
1
+ module FbGraph
2
+ class Post < Node
3
+ attr_accessor :from, :to, :message, :picture, :link, :name, :caption, :description, :source, :icon, :attribution, :actions, :likes, :created_time, :updated_time
4
+
5
+ def initialize(identifier, options = {})
6
+ super
7
+ if (from = options[:from])
8
+ @from = if from[:category]
9
+ FbGraph::Page.new(from[:id], :name => from[:name], :category => from[:category])
10
+ else
11
+ FbGraph::User.new(from[:id], :name => from[:name])
12
+ end
13
+ end
14
+ @to = []
15
+ if options[:to]
16
+ options[:to].each do |to|
17
+ @to << if to[:category]
18
+ FbGraph::Page.new(to[:id], :name => to[:name], :category => to[:category])
19
+ else
20
+ FbGraph::User.new(to[:id], :name => to[:name])
21
+ end
22
+ end
23
+ end
24
+ @message = options[:message]
25
+ @picture = options[:picture]
26
+ @link = options[:link]
27
+ @name = options[:name]
28
+ @caption = options[:caption]
29
+ @description = options[:description]
30
+ @source = options[:source]
31
+ @icon = options[:icon]
32
+ @attribution = options[:attribution]
33
+ @actions = options[:actions]
34
+ @likes = options[:likes]
35
+ @created_time = options[:created_time]
36
+ @updated_time = options[:updated_time]
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ module FbGraph
2
+ class Status < Node
3
+ attr_accessor :from, :message, :updated_time
4
+
5
+ def initialize(identifier, options = {})
6
+ super
7
+ if (from = options[:from])
8
+ @from = if from[:category]
9
+ FbGraph::Page.new(from[:id], :name => from[:name], :category => from[:category])
10
+ else
11
+ FbGraph::User.new(from[:id], :name => from[:name])
12
+ end
13
+ end
14
+ @message = options[:message]
15
+ @updated_time = options[:updated_time]
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ module FbGraph
2
+ class User < Node
3
+ include Connections::Home
4
+ include Connections::Feed
5
+ include Connections::Posts
6
+ include Connections::Likes
7
+ include Connections::Picture
8
+ include Connections::Statuses
9
+
10
+ attr_accessor :name, :last_name, :first_name, :link, :about, :birthday, :work, :education, :email, :website
11
+
12
+ def initialize(identifier, options = {})
13
+ super
14
+ @name = options[:name]
15
+ @last_name = options[:last_name]
16
+ @first_name = options[:first_name]
17
+ @link = options[:link]
18
+ @about = options[:about]
19
+ @birthday = options[:birthday]
20
+ @work = options[:work]
21
+ @education = options[:education]
22
+ @email = options[:email]
23
+ @website = options[:website]
24
+ end
25
+
26
+ def self.me(access_token)
27
+ new('me', :access_token => access_token)
28
+ end
29
+
30
+ end
31
+ end
data/lib/fb_graph.rb ADDED
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'json'
3
+ require 'active_support'
4
+ require 'rest_client'
5
+
6
+ module FbGraph
7
+ ROOT_URL = "https://graph.facebook.com"
8
+
9
+ class FbGraph::Exception < StandardError; end
10
+ class FbGraph::Unauthorized < FbGraph::Exception; end
11
+ class FbGraph::NotFound < FbGraph::Exception; end
12
+
13
+ class << self
14
+ def node(identifier, options = {})
15
+ Node.new(identifier, options)
16
+ end
17
+ def user(identifier, options = {})
18
+ User.new(identifier, options)
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ Dir[File.dirname(__FILE__) + '/fb_graph/*.rb'].each do |file|
25
+ require file
26
+ end
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "19292868552",
3
+ "name": "Facebook Platform",
4
+ "picture": "http://profile.ak.fbcdn.net/object3/1566/8/s19292868552_1660.jpg",
5
+ "link": "http://www.facebook.com/platform",
6
+ "category": "Technology",
7
+ "username": "platform",
8
+ "founded": "May 2007",
9
+ "company_overview": "Facebook Platform enables anyone to build social applications on Facebook and the web.",
10
+ "mission": "To make the web more open and social.",
11
+ "products": "Facebook Application Programming Interface (API)\nFacebook Query Language (FQL)\nFacebook Markup Language (FBML)\nFacebook JavaScript (FBJS)\nFacebook Connect\n",
12
+ "fan_count": 453163
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "19292868552",
3
+ "name": "Facebook Platform",
4
+ "picture": "http://profile.ak.fbcdn.net/object3/1566/8/s19292868552_1660.jpg",
5
+ "link": "http://www.facebook.com/platform",
6
+ "category": "Technology",
7
+ "username": "platform",
8
+ "founded": "May 2007",
9
+ "company_overview": "Facebook Platform enables anyone to build social applications on Facebook and the web.",
10
+ "mission": "To make the web more open and social.",
11
+ "products": "Facebook Application Programming Interface (API)\nFacebook Query Language (FQL)\nFacebook Markup Language (FBML)\nFacebook JavaScript (FBJS)\nFacebook Connect\n",
12
+ "fan_count": 453163
13
+ }