Please disable Adblockers and enable JavaScript for domain CEWebS.cs.univie.ac.at! We have NO ADS, but they may interfere with some of our course material.

Name: examples/flickr/Flickr/flickr.rb 
1:
#!/usr/bin/ruby
2:
require 'digest/md5'
3:
require '../../../lib/ruby/riddl/client'
4:
require 'pp'
5:
 
6:
# no ready for use
7:
unless File.exist?('.flickr.frob')
8:
  puts "Check the README file and use authenticate.rb."
9:
  exit
10:
end
11:
 
12:
puts "Let's go!!!"
13:
 
14:
### init Riddl client and get resource
15:
flickr = Riddl::Client.interface("http://api.flickr.com/services","flickr.xml")
16:
 
17:
puts "and go..."
18:
 
19:
rest = flickr.resource("/rest")
20:
 
21:
puts "Get resources!!!"
22:
 
23:
### get resources
24:
rest = flickr.resource("/rest")
25:
upload = flickr.resource("/upload")
26:
 
27:
### read application key/secret/frob
28:
key = File.read('.flickr.key').strip
29:
secret = File.read('.flickr.secret').strip
30:
frob = File.read('.flickr.frob').strip
31:
 
32:
### get
33:
if File.exist?('.flickr.token')
34:
  token = File.read('.flickr.token').strip
35:
else
36:
  puts "hmm, there is no token...."
37:
  method = 'flickr.auth.getToken'
38:
  sig = Digest::MD5.hexdigest("#{secret}api_key#{key}frob#{frob}method#{method}")
39:
  status, res = rest.get [
40:
    Riddl::Parameter::Simple.new("method",method,:query),
41:
    Riddl::Parameter::Simple.new("api_key",key,:query),
42:
    Riddl::Parameter::Simple.new("frob",frob,:query),
43:
    Riddl::Parameter::Simple.new("api_sig",sig,:query)
44:
  ]
45:
  raise "frob no longer valid, delete .flickr.frob then retry authenticate.rb" unless status == 200
46:
  token = XML::Smart::string(res[0].value.read).find('string(/rsp/auth/token)')
47:
 
48:
  puts res[0].value.read
49:
 
50:
  File.open('.flickr.token','w'){|f|f.write(token)}
51:
end
52:
 
53:
# check token
54:
method = 'flickr.auth.checkToken'
55:
sig = Digest::MD5.hexdigest("#{secret}api_key#{key}auth_token#{token}method#{method}")
56:
status, res = rest.get [
57:
  Riddl::Parameter::Simple.new("method",method,:query),
58:
  Riddl::Parameter::Simple.new("api_key",key,:query),
59:
  Riddl::Parameter::Simple.new("auth_token",token,:query),
60:
  Riddl::Parameter::Simple.new("api_sig",sig,:query)
61:
]
62:
raise "token no longer valid, delete .flickr.token, .flickr.frob then retry authenticate.rb, flickr.rb" unless status == 200
63:
 
64:
# upload image
65:
title = "RIDDL Logo"
66:
desc = "The official RIDDL logo, the first thing created for this project."
67:
tags = "RIDDL, REST, Composition, Evolution"
68:
is_public = "1"
69:
sig = Digest::MD5.hexdigest("#{secret}api_key#{key}auth_token#{token}description#{desc}is_public#{is_public}tags#{tags}title#{title}")
70:
status, res = upload.post [
71:
  Riddl::Parameter::Simple.new("api_key", key),
72:
  Riddl::Parameter::Simple.new("auth_token", token),
73:
  Riddl::Parameter::Complex.new("photo","image/png",File.open('riddl.png','r'),'riddl.png'),
74:
  Riddl::Parameter::Simple.new("title", title),
75:
  Riddl::Parameter::Simple.new("description", desc),
76:
  Riddl::Parameter::Simple.new("tags", tags),
77:
  Riddl::Parameter::Simple.new("is_public", is_public),
78:
  Riddl::Parameter::Simple.new("api_sig", sig)
79:
]
80:
 
81:
rsp = XML::Smart::string(res[0].value.read)
82:
stat = rsp.find('string(/rsp/@stat)')
83:
if stat == 'ok'
84:
  puts "Status:  " + stat
85:
  puts "PhotoID: " + rsp.find('string(/rsp/photoid)')
86:
else
87:
  puts "Status:  " + stat
88:
  puts "Reason: --------------------------------------"
89:
  puts rsp.to_s
90:
end