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 |