Skip to content

Instantly share code, notes, and snippets.

@craigeley
Last active July 27, 2017 23:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save craigeley/92e8a01acc4a40d84d16 to your computer and use it in GitHub Desktop.
Save craigeley/92e8a01acc4a40d84d16 to your computer and use it in GitHub Desktop.
This gist checks you into your most recent Foursquare location from the Reporter iOS app, if you aren't already checked in there. To read more, see http://verifyandrepair.com/02-26-2016/using-reporter-foursquare/
#!/usr/bin/env ruby
# Use Reporter as a Foursquare Client
# Assumes your Reports contain these two questions:
# "What are you doing?" and
# "Where are you?"
require 'time'
require 'json'
require 'net/http'
# To prevent encoding errors on OSX
if RUBY_VERSION =~ /2.*.*/
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
end
# Set Variables - Path to Dropbox; Foursquare token; script variables
filepath = "/Users/USERNAME/Dropbox/Apps/Reporter-App/"
token = "FOURSQUARE_API_TOKEN"
new_checkin = false
id = ''
# Get the current file and parse it
datepath = Time.now.strftime("%Y-%m-%d")
file = File.open(filepath+datepath+"-reporter-export.json", encoding: 'UTF-8')
json = file.read
data = JSON.parse(json)
# Grab the data - default answers for sleep and wake, user input for everything else
imp = data["snapshots"][-1]["reportImpetus"].to_i
if imp == 3
act = "Heading to bed"
elsif imp == 4
act = "Waking up"
else
data["snapshots"][-1]["responses"].each do |response|
lat = data["snapshots"][-1]["location"]["latitude"]
long = data["snapshots"][-1]["location"]["longitude"]
ll = "#{lat},#{long}"
if response["questionPrompt"] =~ /doing/
act = response["tokens"][0]["text"]
elsif response["questionPrompt"] =~ /Where/ && response["locationResponse"] != nil
location = response["locationResponse"]["text"]
url = URI.parse("https://api.foursquare.com/v2/users/self/checkins?limit=1&oauth_token=" + token + "&v=20140823")
buffer = Net::HTTP.get(url)
checkins = JSON.parse(buffer)
place = checkins["response"]["checkins"]["items"][0]["venue"]["name"]
if place == location
puts "You're already here!"
elsif place != location
venueURI = URI.escape("https://api.foursquare.com/v2/venues/search?oauth_token=#{token}&ll=#{ll}&query=#{location}&limit=1&v=20140823")
venueURI = URI.parse(venueURI)
res = Net::HTTP.get(venueURI)
venues = JSON.parse(res)
id = venues["response"]["venues"][0]["id"]
new_checkin = true
end
end
end
end
if new_checkin == true
uri = URI('https://api.foursquare.com/v2/checkins/add?')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
data = {
"venueId" => "#{id}",
"shout" => "#{act}",
"oauth_token" => "#{token}",
"v" => "20160222",
"broadcast" => "private",
}
body = URI.encode_www_form(data)
req = Net::HTTP::Post.new(uri)
req.add_field "Content-Type", "application/x-www-form-urlencoded"
req.body = body
res = http.request(req)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment