foursquared 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/Gemfile +19 -0
- data/Guardfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +30 -0
- data/Rakefile +30 -0
- data/foursquared.gemspec +34 -0
- data/lib/core_ext/symbol.rb +7 -0
- data/lib/foursquared/badges.rb +12 -0
- data/lib/foursquared/checkins.rb +89 -0
- data/lib/foursquared/client.rb +58 -0
- data/lib/foursquared/error.rb +17 -0
- data/lib/foursquared/events.rb +18 -0
- data/lib/foursquared/lists.rb +97 -0
- data/lib/foursquared/oauth/client.rb +37 -0
- data/lib/foursquared/pages.rb +49 -0
- data/lib/foursquared/photos.rb +34 -0
- data/lib/foursquared/response/badge.rb +87 -0
- data/lib/foursquared/response/badge_group.rb +42 -0
- data/lib/foursquared/response/category.rb +53 -0
- data/lib/foursquared/response/checkin.rb +180 -0
- data/lib/foursquared/response/event.rb +52 -0
- data/lib/foursquared/response/list.rb +199 -0
- data/lib/foursquared/response/list_item.rb +63 -0
- data/lib/foursquared/response/photo.rb +102 -0
- data/lib/foursquared/response/special.rb +131 -0
- data/lib/foursquared/response/tip.rb +134 -0
- data/lib/foursquared/response/user.rb +246 -0
- data/lib/foursquared/response/venue.rb +252 -0
- data/lib/foursquared/settings.rb +28 -0
- data/lib/foursquared/specials.rb +25 -0
- data/lib/foursquared/tips.rb +113 -0
- data/lib/foursquared/users.rb +206 -0
- data/lib/foursquared/venues.rb +217 -0
- data/lib/foursquared/version.rb +4 -0
- data/lib/foursquared.rb +47 -0
- data/spec/foursquared/badges_spec.rb +82 -0
- data/spec/foursquared/checkins_spec.rb +0 -0
- data/spec/foursquared/events_spec.rb +50 -0
- data/spec/foursquared/oauth/client_spec.rb +24 -0
- data/spec/foursquared/pages_spec.rb +42 -0
- data/spec/foursquared/photos_spec.rb +41 -0
- data/spec/foursquared/response/badge_spec.rb +40 -0
- data/spec/foursquared/response/category_spec.rb +48 -0
- data/spec/foursquared/response/checkin_spec.rb +100 -0
- data/spec/foursquared/response/event_category_spec.rb +48 -0
- data/spec/foursquared/response/event_spec.rb +60 -0
- data/spec/foursquared/response/list_spec.rb +56 -0
- data/spec/foursquared/response/photo_spec.rb +70 -0
- data/spec/foursquared/response/special_spec.rb +0 -0
- data/spec/foursquared/response/user_spec.rb +124 -0
- data/spec/foursquared/response/venue_spec.rb +83 -0
- data/spec/foursquared/specials_spec.rb +4 -0
- data/spec/foursquared/users_spec.rb +241 -0
- data/spec/spec_helper.rb +27 -0
- metadata +344 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Rony Varghese
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Foursquared
|
2
|
+
[![Build Status](https://travis-ci.org/ronyv89/foursquared.png)](https://travis-ci.org/ronyv89/foursquared)
|
3
|
+
|
4
|
+
Simple client library for Foursquare API V2 with OAuth2 authentication
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'foursquared'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install foursquared
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
30
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
require "rake/tasklib"
|
3
|
+
require 'ci/reporter/rake/rspec'
|
4
|
+
require 'yard'
|
5
|
+
require 'yard/rake/yardoc_task'
|
6
|
+
require "bundler/gem_tasks"
|
7
|
+
|
8
|
+
RSpec::Core::RakeTask.new(:spec => ["ci:setup:rspec"]) do |t|
|
9
|
+
t.pattern = 'spec/**/*_spec.rb'
|
10
|
+
end
|
11
|
+
|
12
|
+
task :default => :spec
|
13
|
+
|
14
|
+
desc "Analyze for code complexity"
|
15
|
+
task :metric_abc do
|
16
|
+
puts `bundle exec metric_abc \`find lib/ -iname '*.rb'\``
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
YARD::Rake::YardocTask.new(:yard) do |y|
|
22
|
+
y.options = ["--output-dir", "yardoc"]
|
23
|
+
end
|
24
|
+
|
25
|
+
namespace :yardoc do
|
26
|
+
desc "generates yardoc files to yardoc/"
|
27
|
+
task :generate => :yard do
|
28
|
+
puts "Yardoc files generated at yardoc/"
|
29
|
+
end
|
30
|
+
end
|
data/foursquared.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'foursquared/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "foursquared"
|
8
|
+
gem.platform = Gem::Platform::RUBY
|
9
|
+
gem.version = Foursquared::VERSION
|
10
|
+
gem.authors = ["Rony Varghese"]
|
11
|
+
gem.email = ["ronyv250289@gmail.com"]
|
12
|
+
gem.description = "Simple foursquare api client"
|
13
|
+
gem.summary = "Simple foursquare api client"
|
14
|
+
gem.homepage = "https://github.com/ronyv89/foursquared"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.require_paths = ["lib"]
|
20
|
+
gem.add_dependency 'httmultiparty'
|
21
|
+
gem.add_dependency 'oauth2'
|
22
|
+
gem.add_development_dependency "rspec"
|
23
|
+
gem.add_development_dependency "rake"
|
24
|
+
gem.add_development_dependency "guard"
|
25
|
+
gem.add_development_dependency "guard-rspec"
|
26
|
+
gem.add_development_dependency "simplecov"
|
27
|
+
gem.add_development_dependency "metric_abc"
|
28
|
+
gem.add_development_dependency "yard"
|
29
|
+
gem.add_development_dependency "ci_reporter"
|
30
|
+
gem.add_development_dependency "simplecov-rcov"
|
31
|
+
gem.add_development_dependency "rdiscount"
|
32
|
+
gem.add_development_dependency "webmock"
|
33
|
+
gem.add_development_dependency "rspec_multi_matchers"
|
34
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Foursquared
|
2
|
+
# Badges module
|
3
|
+
module Badges
|
4
|
+
# Badge details
|
5
|
+
# @param [String] badge_id required, The id of the badge
|
6
|
+
# @return [Foursquared::Response::Badge]
|
7
|
+
def badge badge_id
|
8
|
+
response = get("/badges/#{badge_id}")["response"]
|
9
|
+
Foursquared::Response::Badge.new(self,response["badge"])
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# Foursquared module
|
2
|
+
module Foursquared
|
3
|
+
# Checkins module
|
4
|
+
module Checkins
|
5
|
+
|
6
|
+
# Get details of a checkin.
|
7
|
+
# @param [String] checkin_id The ID of the checkin to retrieve additional information for.
|
8
|
+
# @param [Hash] options
|
9
|
+
# @option options [String] :signature
|
10
|
+
# @return [Foursquared::Response::Checkin] A checkin object
|
11
|
+
def checkin checkin_id, options={}
|
12
|
+
response = get("/checkins/#{checkin_id}",options)["response"]
|
13
|
+
@checkin = Foursquared::Response::Checkin.new(self, response["checkin"])
|
14
|
+
end
|
15
|
+
|
16
|
+
# Create a check-in
|
17
|
+
# @param [Hash] options
|
18
|
+
# @option options [String] :venueId required The venue where the user is checking in.
|
19
|
+
# @option options [String] :eventId The event the user is checking in to.
|
20
|
+
# @option options [String] :shout A message about your check-in
|
21
|
+
# @option options [String] :mentions Semicolon-delimited list of mentions
|
22
|
+
# @option options [String] :broadcast Who to broadcast this check-in to
|
23
|
+
# @option options [String] :ll Latitude and longitude of the user's location.
|
24
|
+
# @option options [String] :llAcc Accuracy of the user's latitude and longitude, in meters
|
25
|
+
# @option options [String] :alt Altitude of the user's location, in meters.
|
26
|
+
# @option options [String] :altAcc Vertical accuracy of the user's location, in meters.
|
27
|
+
# @return [Foursquared::Response::Checkin] A checkin object
|
28
|
+
def add_checkin options={}
|
29
|
+
response = post("/checkins/add", options)["response"]
|
30
|
+
{:checkin => Foursquared::Response::Checkin.new(self, response["checkin"]), :notifications => Foursquared::Response::Notifications.new(self, response["notifications"])}
|
31
|
+
end
|
32
|
+
|
33
|
+
# Recent checkins by friends
|
34
|
+
# @param [Hash] options
|
35
|
+
# @option options [String] :ll Latitude and longitude of the user's location, so response can include distance
|
36
|
+
# @option options [Integer] :limit Number of results to return, up to 100.
|
37
|
+
# @option options [Integer] :afterTimestamp Seconds after which to look for checkins
|
38
|
+
# @return [Array] An array of checkin objects with user details present
|
39
|
+
def recent_checkins options={}
|
40
|
+
response = get("/checkins/recent", options)["response"]
|
41
|
+
@checkins = response["recent"].collect{|checkin| Foursquared::Response::Checkin.new(self, checkin)}
|
42
|
+
end
|
43
|
+
|
44
|
+
# Users who have liked a checkin
|
45
|
+
# @param [String] checkin_id The ID of the checkin to get likes for.
|
46
|
+
# @return [Hash] A count and groups of users who like this checkin
|
47
|
+
def checkin_likes checkin_id
|
48
|
+
response = get("/checkins/#{checkin_id}/likes")["response"]
|
49
|
+
@likes = response["likes"]
|
50
|
+
@likes.groups.each{|group| group["items"].map!{|item|Foursquared::Response::User.new(self, item)}}
|
51
|
+
@likes
|
52
|
+
end
|
53
|
+
|
54
|
+
# Add a comment to a check-in
|
55
|
+
# @param [String] checkin_id The ID of the checkin to add a comment to.
|
56
|
+
# @param [Hash] options
|
57
|
+
# @option options [String] :text The text of the comment, up to 200 characters.
|
58
|
+
# @option options [String] :mentions Mentions in your check-in.
|
59
|
+
# @return [Hash] The newly-created comment.
|
60
|
+
def add_checkin_comment checkin_id, options={}
|
61
|
+
response = post("/checkins/#{checkin_id}/addcomment", options)["response"]
|
62
|
+
@comment = response["comment"]
|
63
|
+
@comment["user"] = Foursquared::Response::User.new(self, @comment["user"])
|
64
|
+
@comment
|
65
|
+
end
|
66
|
+
|
67
|
+
# Remove commment from check-in
|
68
|
+
# @param [String] checkin_id The ID of the checkin to remove a comment from.
|
69
|
+
# @param [Hash] options
|
70
|
+
# @option options [String] :commentId
|
71
|
+
# @return [Foursquared::Response::Checkin] The checkin, minus this comment.
|
72
|
+
def delete_checkin_comment checkin_id, options={}
|
73
|
+
response = post("/checkins/#{checkin_id}/deletecomment", options)["response"]
|
74
|
+
@checkin = Foursquared::Response::Checkin.new(self, response["checkin"])
|
75
|
+
end
|
76
|
+
|
77
|
+
# Like or unlike a checkin
|
78
|
+
# @param [String] checkin_id The ID of the checkin to like
|
79
|
+
# @param [Hash] options
|
80
|
+
# @option options [Integer] :set If 1, like this checkin. If 0 unlike (un-do a previous like) it. Default value is 1.
|
81
|
+
def like_checkin checkin_id, options={}
|
82
|
+
response = post("/checkins/#{checkin_id}/like", options)["response"]["likes"]
|
83
|
+
response["groups"].each do |group|
|
84
|
+
group["items"].map!{|item| Foursquared::Response::User.new(self, item)}
|
85
|
+
end
|
86
|
+
response
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'httmultiparty'
|
2
|
+
# Foursquared module
|
3
|
+
module Foursquared
|
4
|
+
# The Client class
|
5
|
+
class Client
|
6
|
+
attr_accessor :access_token
|
7
|
+
include HTTMultiParty
|
8
|
+
include Users
|
9
|
+
include Photos
|
10
|
+
include Lists
|
11
|
+
include Venues
|
12
|
+
include Checkins
|
13
|
+
include Badges
|
14
|
+
include Events
|
15
|
+
include Pages
|
16
|
+
base_uri 'https://api.foursquare.com/v2/'
|
17
|
+
format :json
|
18
|
+
|
19
|
+
def initialize credentials={}
|
20
|
+
|
21
|
+
if credentials[:access_token]
|
22
|
+
self.class.default_params :oauth_token => credentials[:access_token]
|
23
|
+
elsif credentials[:client_id] and credentials[:client_secret]
|
24
|
+
self.class.default_params :client_id => credentials[:client_id]
|
25
|
+
self.class.default_params :client_secret => credentials[:client_secret]
|
26
|
+
else
|
27
|
+
raise "Must provide access_token or client_id and client_secret"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Do a 'get' request
|
32
|
+
# @param [String] url the url to get
|
33
|
+
# @param [Hash] options Additonal options to be passed
|
34
|
+
def get url, options={}
|
35
|
+
options.merge!({:v => Time.now.strftime("%Y%m%d")}) unless options[:v]
|
36
|
+
response = self.class.get(url, {:query => options}).parsed_response
|
37
|
+
if response["meta"]["code"] == 200
|
38
|
+
return response
|
39
|
+
else
|
40
|
+
raise Foursquared::Error.new(response["meta"])
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Do a 'post' request
|
45
|
+
# @param [String] url the url to post
|
46
|
+
# @param [Hash] options Additonal options to be passed
|
47
|
+
def post url, options={}
|
48
|
+
options.merge!({:v => Time.now.strftime("%Y%m%d")}) unless options[:v]
|
49
|
+
response = self.class.post(url, {:body => options}).parsed_response
|
50
|
+
if response["meta"]["code"] == 200
|
51
|
+
return response
|
52
|
+
else
|
53
|
+
raise Foursquared::Error.new(response["meta"])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Foursquared
|
2
|
+
# Error class
|
3
|
+
class Error < StandardError
|
4
|
+
attr_reader :code, :type, :detail
|
5
|
+
def initialize meta
|
6
|
+
@code = meta["code"]
|
7
|
+
@detail = meta["errorDetail"]
|
8
|
+
@type = meta["errorType"]
|
9
|
+
end
|
10
|
+
|
11
|
+
# Error message to be displayed on encountering Foursquare::Error
|
12
|
+
def message
|
13
|
+
"#{type}: #{detail} (#{code})"
|
14
|
+
end
|
15
|
+
alias :to_s :message
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Foursquared
|
2
|
+
# Events module
|
3
|
+
module Events
|
4
|
+
# Return the event with the give ID
|
5
|
+
# @return [Foursquared::Response::Event]
|
6
|
+
def event event_id
|
7
|
+
response = get("/events/#{event_id}")["response"]
|
8
|
+
Foursquared::Response::Event.new(self,response["event"])
|
9
|
+
end
|
10
|
+
|
11
|
+
# Return the available event categories
|
12
|
+
# @return [Array] An array of event categories
|
13
|
+
def event_categories
|
14
|
+
response = get("/events/categories")["response"]
|
15
|
+
response["categories"].collect{|category| Foursquared::Response::Category.new(self, category)}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Foursquared
|
2
|
+
# Lists module
|
3
|
+
module Lists
|
4
|
+
# Gives details about a list.
|
5
|
+
# @param [String] list_id required, ID for a list
|
6
|
+
# @param [Hash] options
|
7
|
+
# @option options [Integer] :limit Number of results to return, up to 200.
|
8
|
+
# @option options [Integer] :offset The number of results to skip
|
9
|
+
# @option options [String] :llBounds Restricts the returned results to the input bounding box.
|
10
|
+
# @option options [String] :categoryId Restricts the returned results to venues matching the input category id.
|
11
|
+
# @return [Foursquared::Response::List]
|
12
|
+
def list list_id, options={}
|
13
|
+
response = get("/lists/#{list_id}", options)["response"]
|
14
|
+
@list = Foursquared::Response::List.new(self, response["list"])
|
15
|
+
end
|
16
|
+
|
17
|
+
# Add a List
|
18
|
+
# @param [Hash] options
|
19
|
+
# @option options [String] :name required, The name of the list.
|
20
|
+
# @option options [String] :description The description of the list.
|
21
|
+
# @option options [Boolean] :collaborative Boolean indicating if this list can be edited by friends.
|
22
|
+
# @option options [String] :photoId The id of a photo that should be set as the list photo.
|
23
|
+
# @return [Foursquared::Response::List] The added list
|
24
|
+
def add_list options={}
|
25
|
+
response = post("/lists/add", options)["response"]
|
26
|
+
Foursquared::Response::List.new(self, response["list"])
|
27
|
+
end
|
28
|
+
|
29
|
+
# Suggests photos that may be appropriate for a list item.
|
30
|
+
# @param [String] list_id required, ID for a list
|
31
|
+
# @param [Hash] options
|
32
|
+
# @option options [String] :itemId required, The ID of the list item
|
33
|
+
# @return [Hash] Groups user and others containing lists (a count and items of photos) of photos uploaded by this user and uploaded by other users.
|
34
|
+
def suggest_list_photo list_id, options={}
|
35
|
+
@photos = get("/lists/#{list_id}/suggestphoto", options)["response"]["photos"]
|
36
|
+
if @photos
|
37
|
+
@photos.each_key do |key|
|
38
|
+
key["items"] = key["items"].collect{|photo| Foursquared::Response::Photo.new(client, photo)}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
@photos
|
42
|
+
end
|
43
|
+
|
44
|
+
# Suggests venues that may be appropriate for a list.
|
45
|
+
# @param [String] list_id required, ID for a list
|
46
|
+
# @return [Array] Compact venues that may be appropriate for this list.
|
47
|
+
def suggest_list_venues list_id
|
48
|
+
@suggested_venues = get("/lists/#{list_id}/suggestvenues")["response"]["suggestedVenues"]
|
49
|
+
@suggested_venues.each do |item|
|
50
|
+
item["venue"] = Foursquared::Response::Venue.new(self, item["venue"])
|
51
|
+
end
|
52
|
+
@suggested_venues
|
53
|
+
end
|
54
|
+
|
55
|
+
# Suggests tips that may be appropriate for a list item
|
56
|
+
# @param [String] list_id required, ID for a list
|
57
|
+
# @param [Hash] options
|
58
|
+
# @option options [String] :itemId required, The ID of the list item
|
59
|
+
def suggest_list_tip list_id, options={}
|
60
|
+
@tips = get("/lists/#{list_id}/suggesttip", options)["response"]["tips"]
|
61
|
+
if @tips
|
62
|
+
@tips.each_key do |key|
|
63
|
+
key["items"].map!{|item| Foursquared::Response::Photo.new(client, item)}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
@tips
|
67
|
+
end
|
68
|
+
|
69
|
+
# Add an Item to a list
|
70
|
+
# @param [String] list_id required, ID for a list
|
71
|
+
# @param [Hash] options
|
72
|
+
# @option options [String] :venueId A venue to add to the list
|
73
|
+
# @option options [String] :text If the target is a user-created list, this will create a public tip on the venue. If the target is /userid/todos, the text will be a private note that is only visible to the author.
|
74
|
+
# @option options [String] :url If adding a new tip via text, this can associate a url with the tip.
|
75
|
+
# @option options [String] :tipId Used to add a tip to a list. Cannot be used in conjunction with the text and url fields.
|
76
|
+
# @option options [String] :listId Used in conjuction with itemId, the id for a user created or followed list as well as one of USER_ID/tips, USER_ID/todos, or USER_ID/dones.
|
77
|
+
# @option options [String] :itemId Used in conjuction with listId, the id of an item on that list that we wish to copy to this list.
|
78
|
+
# @return [Foursquared::Response::ListItem] The newly added list item
|
79
|
+
def add_list_item list_id, options={}
|
80
|
+
@item = post("/lists/#{list_id}/additem", options)["response"]["item"]
|
81
|
+
Foursquared::Response::ListItem.new(client, @item) if @item
|
82
|
+
end
|
83
|
+
|
84
|
+
# Delete an item from the list
|
85
|
+
# @param [String] list_id required, ID for a list
|
86
|
+
# @param [Hash] options
|
87
|
+
# @option options [String] :venueId ID of a venue to be deleted.
|
88
|
+
# @option options [String] :itemId ID of the item to delete.
|
89
|
+
# @option options [String] :tipId id of a tip to be deleted.
|
90
|
+
# @return [Hash] A count and items of list items that were just deleted.
|
91
|
+
def delete_list_item list_id, options={}
|
92
|
+
@items = client.post("/lists/#{list_id}/deleteitem", options)["response"]["items"]
|
93
|
+
@items["items"].map!{|item| Foursquared::Response::ListItem.new(client, item)}
|
94
|
+
@list_items
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'oauth2'
|
2
|
+
module Foursquared
|
3
|
+
# OAuth module
|
4
|
+
module OAuth
|
5
|
+
# OAuth Client class
|
6
|
+
class Client
|
7
|
+
attr_accessor :client_id, :client_secret, :oauth_client, :callback_url, :access_token
|
8
|
+
def initialize(client_id, client_secret, callback_url, opts={}, &block)
|
9
|
+
@client_id = client_id
|
10
|
+
@client_secret = client_secret
|
11
|
+
@callback_url = callback_url
|
12
|
+
ssl = opts.delete(:ssl)
|
13
|
+
|
14
|
+
@options = {
|
15
|
+
:site => 'https://foursquare.com/',
|
16
|
+
:authorize_url => '/oauth2/authenticate?response_type=code',
|
17
|
+
:token_url => '/oauth2/access_token',
|
18
|
+
:parse_json => true}.merge(opts)
|
19
|
+
@options[:connection_opts][:ssl] = ssl if ssl
|
20
|
+
@oauth_client = OAuth2::Client.new(client_id, client_secret, @options)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Step 1: URL for OAuth2 oauthorizetion of Foursquare
|
24
|
+
# @return [String]
|
25
|
+
def authorize_url
|
26
|
+
oauth_client.auth_code.authorize_url(:redirect_uri => callback_url)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Step 2: Get access token after authorizing user
|
30
|
+
# @param [String] code The value extracted from the callback url param 'code'
|
31
|
+
def get_access_token code
|
32
|
+
token = oauth_client.auth_code.get_token(code, :redirect_uri => callback_url)
|
33
|
+
@access_token = token.token
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Foursquared
|
2
|
+
# Pages module
|
3
|
+
module Pages
|
4
|
+
# Return the page with the given ID
|
5
|
+
# @param [String] page_id ID of the page
|
6
|
+
# @return [FOursquared::Response::User]
|
7
|
+
def page page_id
|
8
|
+
response = get("/pages/#{page_id}")["response"]
|
9
|
+
@page = Foursquared::Response::User.new(self, response["user"])
|
10
|
+
end
|
11
|
+
|
12
|
+
# Search Pages
|
13
|
+
# @param [Hash] options
|
14
|
+
# @option options [String] :name A search term to be applied against page names.
|
15
|
+
# @option options [String] :twitter A comma-delimited list of Twitter handles to look for.
|
16
|
+
# @option options [String] :fbid A comma-delimited list of Facebook ID's to look for.
|
17
|
+
def page_search options={}
|
18
|
+
response = get("/pages/search",options)["response"]
|
19
|
+
@pages = response.collect{|result| Foursquared::Response::User.new(self, result)}
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns the page's venues.
|
23
|
+
# @param [String] page_id ID of the page
|
24
|
+
# @param [Hash] options
|
25
|
+
# @option options [String] :ll Not valid with ne or sw. Limits results to venues near this latitude and longitude within an optional radius.
|
26
|
+
# @option options [String] :radius Not valid with ne or sw. Limit results to venues within this many meters of the specified ll
|
27
|
+
# @option options [String] :sw With ne, limits results to the bounding quadrangle defined by the latitude and longitude given by sw as its south-west corner, and ne as its north-east corner.
|
28
|
+
# @option options [String] :ne See sw
|
29
|
+
# @option options [Integer] :offset The offset of which venues to return. Defaults to 0.
|
30
|
+
# @option options [String] :limit The number of venues to return. Defaults to 20, max of 100.
|
31
|
+
# @return [Hash] Count and items of venues
|
32
|
+
def page_venues page_id, options={}
|
33
|
+
@venues = get("/pages/#{page_id}/venues", options)["response"]["venues"]
|
34
|
+
@venues["items"].map!{|item| Foursquared::Response::Venue.new(self, item)}
|
35
|
+
@venues
|
36
|
+
end
|
37
|
+
|
38
|
+
# Like or unlike a page
|
39
|
+
# @param [String] page_id ID of the page to like or unlike.
|
40
|
+
# @param [Hash] options
|
41
|
+
# @option options [Integer] :set If 1, like this page. If 0 unlike (un-do a previous like) it. Default value is 1.
|
42
|
+
# @return [Foursquared::Response::User]
|
43
|
+
def like_page page_id, options={}
|
44
|
+
response = post("/pages/#{page_id}/like",options)["response"]
|
45
|
+
@page = Foursquared::Response::User.new(self, response["user"])
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Foursquared
|
2
|
+
# photos module
|
3
|
+
module Photos
|
4
|
+
# Return the photo with the given ID
|
5
|
+
# @param photo_id The id of the photo
|
6
|
+
# @return [Foursquared::Response::Photo]
|
7
|
+
def photo photo_id
|
8
|
+
response = get("/photos/#{photo_id}")["response"]
|
9
|
+
@photo = Response::Photo.new(self, response["photo"])
|
10
|
+
end
|
11
|
+
|
12
|
+
# Add a new photo to a checkin, tip, venue, or page update in general.
|
13
|
+
# @param [Hash] options
|
14
|
+
# @option options [String] :checkinId the ID of a checkin owned by the user.
|
15
|
+
# @option options [String] :tipId the ID of a tip owned by the user.
|
16
|
+
# @option options [String] :venueId the ID of a venue, provided only when adding a public photo of the venue in general, rather than a photo for a private checkin, tip, or page update.
|
17
|
+
# @option options [String] :pageId the ID of a page, provided only when adding a photo that will be in an update for that page
|
18
|
+
# @option options [String] :broadcast Whether to broadcast this photo example: twitter,facebook
|
19
|
+
# @option options [Integer] :public When the checkinId is also provided this parameter allows for making the photo public and viewable at the venue. 1 or 0
|
20
|
+
# @option options [String] :ll Latitude and longitude of the user's location.
|
21
|
+
# @option options [String] :llAcc Accuracy of the user's latitude and longitude, in meters.
|
22
|
+
# @option options [String] :alt Altitude of the user's location, in meters.
|
23
|
+
# @option options [String] :altAcc Vertical accuracy of the user's location, in meters.
|
24
|
+
# @option options [String] :postUrl A link for more details about the photo.
|
25
|
+
# @option options [String] :postContentId Identifier for the photo post to be used in a native link
|
26
|
+
# @option options [String] :postText Text for the photo post, up to 200 characters. A checkinId must also be specified in the request.
|
27
|
+
# @return [Foursquared::Response::Photo] The photo that was just created.
|
28
|
+
def add_photo options={}
|
29
|
+
response = post("/photos/add", options)["response"]
|
30
|
+
@photo = Response::Photo.new(self, response["photo"])
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|