avaticon 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / 2008-09-29
2
+
3
+ * initial release
4
+
data/README.rdoc ADDED
@@ -0,0 +1,37 @@
1
+
2
+ = avaticon
3
+
4
+ A library for getting web service user icon.
5
+
6
+ == Description
7
+
8
+
9
+ == Installation
10
+
11
+ === Archive Installation
12
+
13
+ rake install
14
+
15
+ === Gem Installation
16
+
17
+ gem sources -a http://gems.github.com (you only have to do this once)
18
+ sudo gem install swdyh-avaticon
19
+
20
+ == Features/Problems
21
+
22
+
23
+ == Synopsis
24
+
25
+ avt = Avaticon.new
26
+
27
+ # get icon
28
+ icon_url = avt.get_icon 'twitter', 'swdyh'
29
+
30
+ # search by url
31
+ icon_url = avt.search_by_url 'http://twitter.com/swdyh'
32
+
33
+ == Copyright
34
+
35
+ Author:: swdyh http://mailhide.recaptcha.net/d?k=01AhB7crgrlHptVaYRD0oPwA==&c=L_iqOZrGmo6hcGpPTFg1QYnjr-WpAStyQ4Y8ShfgOHs=
36
+ Copyright:: Copyright (c) 2008 swdyh
37
+ License:: The MIT License
data/Rakefile ADDED
@@ -0,0 +1,142 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'rake/contrib/sshpublisher'
10
+ require 'fileutils'
11
+ include FileUtils
12
+
13
+ NAME = "avaticon"
14
+ AUTHOR = "swdyh"
15
+ EMAIL = ""
16
+ DESCRIPTION = "A library for getting web service user icon."
17
+ RUBYFORGE_PROJECT = "avaticon"
18
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
19
+ BIN_FILES = %w( )
20
+ VERS = "0.0.6"
21
+
22
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
23
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
24
+ RDOC_OPTS = [
25
+ '--title', "#{NAME} documentation",
26
+ "--charset", "utf-8",
27
+ "--line-numbers",
28
+ "--main", "README.rdoc",
29
+ "--inline-source",
30
+ ]
31
+
32
+ task :default => [:test]
33
+ task :package => [:clean]
34
+
35
+ Rake::TestTask.new("test") do |t|
36
+ t.libs << "test"
37
+ t.pattern = "test/**/*_test.rb"
38
+ t.verbose = true
39
+ end
40
+
41
+ spec = Gem::Specification.new do |s|
42
+ s.name = NAME
43
+ s.version = VERS
44
+ s.platform = Gem::Platform::RUBY
45
+ s.has_rdoc = true
46
+ s.extra_rdoc_files = ["README.rdoc", "ChangeLog"]
47
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
48
+ s.summary = DESCRIPTION
49
+ s.description = DESCRIPTION
50
+ s.author = AUTHOR
51
+ s.email = EMAIL
52
+ s.homepage = HOMEPATH
53
+ s.executables = BIN_FILES
54
+ s.rubyforge_project = RUBYFORGE_PROJECT
55
+ s.bindir = "bin"
56
+ s.require_path = "lib"
57
+ s.autorequire = ""
58
+ s.test_files = Dir["test/test_*.rb"]
59
+
60
+ s.add_dependency('hpricot', '>= 0.6')
61
+ #s.add_dependency('activesupport', '>=1.3.1')
62
+ #s.required_ruby_version = '>= 1.8.2'
63
+
64
+ s.files = %w(README.rdoc ChangeLog Rakefile) +
65
+ Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
66
+ Dir.glob("ext/**/*.{h,c,rb}") +
67
+ Dir.glob("examples/**/*.rb") +
68
+ Dir.glob("tools/*.rb")
69
+
70
+ s.extensions = FileList["ext/**/extconf.rb"].to_a
71
+ end
72
+
73
+ Rake::GemPackageTask.new(spec) do |p|
74
+ p.need_tar = true
75
+ p.gem_spec = spec
76
+ end
77
+
78
+ task :install do
79
+ name = "#{NAME}-#{VERS}.gem"
80
+ sh %{rake package}
81
+ sh %{sudo gem install pkg/#{name}}
82
+ end
83
+
84
+ task :uninstall => [:clean] do
85
+ sh %{sudo gem uninstall #{NAME}}
86
+ end
87
+
88
+
89
+ Rake::RDocTask.new do |rdoc|
90
+ rdoc.rdoc_dir = 'html'
91
+ rdoc.options += RDOC_OPTS
92
+ rdoc.template = "resh"
93
+ #rdoc.template = "#{ENV['template']}.rb" if ENV['template']
94
+ if ENV['DOC_FILES']
95
+ rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
96
+ else
97
+ rdoc.rdoc_files.include('README.rdoc', 'ChangeLog')
98
+ rdoc.rdoc_files.include('lib/**/*.rb')
99
+ rdoc.rdoc_files.include('ext/**/*.c')
100
+ end
101
+ end
102
+
103
+ desc "Publish to RubyForge"
104
+ task :rubyforge => [:rdoc, :package] do
105
+ require 'rubyforge'
106
+ Rake::RubyForgePublisher.new(RUBYFORGE_PROJECT, 'swdyh').upload
107
+ end
108
+
109
+ desc 'Package and upload the release to rubyforge.'
110
+ task :release => [:clean, :package] do |t|
111
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
112
+ abort "Versions don't match #{v} vs #{VERS}" unless v == VERS
113
+ pkg = "pkg/#{NAME}-#{VERS}"
114
+
115
+ rf = RubyForge.new
116
+ puts "Logging in"
117
+ rf.login
118
+
119
+ c = rf.userconfig
120
+ # c["release_notes"] = description if description
121
+ # c["release_changes"] = changes if changes
122
+ c["preformatted"] = true
123
+
124
+ files = [
125
+ "#{pkg}.tgz",
126
+ "#{pkg}.gem"
127
+ ].compact
128
+
129
+ puts "Releasing #{NAME} v. #{VERS}"
130
+ rf.add_release RUBYFORGE_PROJECT, NAME, VERS, *files
131
+ end
132
+
133
+ desc 'Show information about the gem.'
134
+ task :debug_gemspec do
135
+ puts spec.to_ruby
136
+ end
137
+
138
+ desc 'Update information about the gem.'
139
+ task :update_gemspec do
140
+ open("#{NAME}.gemspec", 'w') { |f| f.puts spec.to_ruby }
141
+ end
142
+
data/lib/avaticon.rb ADDED
@@ -0,0 +1,104 @@
1
+ require 'open-uri'
2
+ require 'rubygems'
3
+ require 'nokogiri'
4
+ require 'json'
5
+
6
+ class Avaticon
7
+ BASE_PATH = File.dirname(__FILE__)
8
+ DEFAULT_SITEINFO_PATH = File.join(BASE_PATH, 'siteinfo.json')
9
+ attr_accessor :siteinfo
10
+
11
+ def initialize opt = {}
12
+ @siteinfo = []
13
+ @tw_id = opt[:tw_id]
14
+ @tw_pw = opt[:tw_pw]
15
+ (opt[:siteinfo_path] || DEFAULT_SITEINFO_PATH).each do |i|
16
+ load_siteinfo i
17
+ end
18
+ end
19
+
20
+ def load_siteinfo path
21
+ JSON.parse(open(path).read).each do |i|
22
+ # 1.9 feature
23
+ # index = @siteinfo.index { |j| j['service_name'] == i['service_name']}
24
+ index = nil
25
+ @siteinfo.each_with_index do |j, ind|
26
+ if j['service_name'] == i['service_name']
27
+ index = ind
28
+ break
29
+ end
30
+ end
31
+
32
+ if index
33
+ @siteinfo[index] = i
34
+ else
35
+ @siteinfo.push i
36
+ end
37
+ end
38
+ end
39
+
40
+ def get_icon service, user_id
41
+ info = @siteinfo.find { |i| i['service_name'] == service }
42
+ if info
43
+ url = info['iconPageUrl'].gsub('{user_id}', user_id)
44
+ html = Avaticon.get_html(url, :tw_id => @tw_id, :tw_pw => @tw_pw)
45
+ icon = Nokogiri::HTML(html).at(info['iconImageElement'])
46
+ if icon
47
+ Avaticon.path2url url, icon['src']
48
+ end
49
+ end
50
+ end
51
+
52
+ def search_by_url url
53
+ @siteinfo.each do |i|
54
+ m = Regexp.new(i['url']).match(url)
55
+ if m
56
+ return get_icon(i['service_name'], m.to_a[1])
57
+ end
58
+ end
59
+ end
60
+
61
+ def services
62
+ @siteinfo.map{ |i| i['service_name'] }
63
+ end
64
+
65
+ def self.path2url url, path
66
+ #FIXME
67
+ case path
68
+ when /^http/
69
+ path
70
+ when /^\//
71
+ u = URI.parse(url)
72
+ u.path = path
73
+ u.to_s
74
+ else
75
+ # url + path
76
+ tmp = url.split('/')
77
+ (tmp[0..(tmp.size - 2)] << path).join('/')
78
+ end
79
+ end
80
+
81
+ def self.get_html url, opt = {}
82
+ open(url).read
83
+ # if /twitter.com/ === url
84
+ # Avaticon.get_tw_html url, opt
85
+ # else
86
+ # open(url).read
87
+ # end
88
+ end
89
+
90
+ def self.get_tw_html url, opt = {}
91
+ require 'mechanize'
92
+ agent = WWW::Mechanize.new
93
+ agent.user_agent_alias = 'Mac Safari'
94
+ page = agent.get'http://twitter.com/login'
95
+ login_form = page.forms.find { |i|
96
+ i.action == 'https://twitter.com/sessions'
97
+ }
98
+ login_form.fields.find { |i| i.name == 'session[username_or_email]'}.value = opt[:tw_id]
99
+ login_form.fields.find { |i| i.name == 'session[password]'}.value = opt[:tw_pw]
100
+ login_form.submit
101
+ agent.get(url).body
102
+ end
103
+ end
104
+
data/lib/siteinfo.json ADDED
@@ -0,0 +1,66 @@
1
+ [
2
+ {
3
+ "service_name": "twitter",
4
+ "url": "^http:\/\/twitter\\.com\/([^.\/]+)",
5
+ "iconPageUrl": "http:\/\/twitter.com\/{user_id}",
6
+ "iconImageElement": "\/\/img[@id=\"profile-image\"]",
7
+ "exampleUrl": "http:\/\/twitter.com\/swdyh",
8
+ "exampleImageUrl": "http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/51990802\/IMAG8174_bigger.JPG"
9
+ },
10
+ {
11
+ "service_name": "wassr",
12
+ "url": "^http:\/\/wassr\\.jp\/user\/([^.\/]+)",
13
+ "iconPageUrl": "http:\/\/wassr.jp\/user\/{user_id}",
14
+ "iconImageElement": "\/\/div[@class=\"image\"]\/a\/img",
15
+ "exampleUrl": "http:\/\/wassr.jp\/user\/kotoriko",
16
+ "exampleImageUrl": "http:\/\/wassr.jp\/user\/kotoriko\/profile_img.png.128.1212746583"
17
+ },
18
+ {
19
+ "service_name": "hatena",
20
+ "url": "^http:\/\/[^.]+\\.hatena.ne\\.jp\/([^.\/]+)",
21
+ "iconPageUrl": "http:\/\/www.hatena.ne.jp\/{user_id}\/",
22
+ "iconImageElement": "\/\/img[@class=\"profile-image\"]",
23
+ "exampleUrl": "http:\/\/www.hatena.ne.jp\/swdyh\/",
24
+ "exampleImageUrl": "http:\/\/www.hatena.ne.jp\/users\/sw\/swdyh\/profile.gif"
25
+ },
26
+ {
27
+ "service_name": "nowa",
28
+ "url": "^http:\/\/([^.\/]+)\\.nowa\\.jp\/profile\/",
29
+ "iconPageUrl": "http:\/\/{user_id}.nowa.jp\/profile\/",
30
+ "iconImageElement": "\/\/div[@class=\"basic-information\"]\/img",
31
+ "exampleUrl": "http:\/\/yuiseki.nowa.jp\/profile\/",
32
+ "exampleImageUrl": "http:\/\/image.nowa.jp\/icon\/00000011c1be13a9decc002ed6f1505814cae91870a1759-o.jpg"
33
+ },
34
+ {
35
+ "service_name": "lastfm",
36
+ "url": "^http:\/\/www\\.lastfm\\.jp\/user\/([^.\/]+)",
37
+ "iconPageUrl": "http:\/\/www.lastfm.jp\/user\/{user_id}",
38
+ "iconImageElement": "\/\/span[@class=\"userImage\"]\/img",
39
+ "exampleUrl": "http:\/\/www.lastfm.jp\/user\/youpy",
40
+ "exampleImageUrl": "http:\/\/userserve-ak.last.fm\/serve\/126\/936583.jpg"
41
+ },
42
+ {
43
+ "service_name": "flickr",
44
+ "url": "^http:\/\/www\\.flickr\\.com\/people\/([^.\/]+)\/",
45
+ "iconPageUrl": "http:\/\/www.flickr.com\/people\/{user_id}\/",
46
+ "iconImageElement": "\/\/td[@class=\"Buddy\"]\/a\/img",
47
+ "exampleUrl": "http:\/\/www.flickr.com\/people\/kusaker\/",
48
+ "exampleImageUrl": "http:\/\/farm1.static.flickr.com\/128\/buddyicons\/39255132@N00.jpg?1169585056#39255132@N00"
49
+ },
50
+ {
51
+ "service_name": "github",
52
+ "url": "^http:\/\/github\\.com\/([^.\/]+)",
53
+ "iconPageUrl": "http:\/\/github.com\/{user_id}",
54
+ "iconImageElement": "\/\/div[@class=\"identity\"]\/img",
55
+ "exampleUrl": "http:\/\/github.com\/kzys",
56
+ "exampleImageUrl": "http:\/\/www.gravatar.com\/avatar\/7828b45f8396aa361d85cead01fd99ca?s=50&d=http%3A%2F%2Fgithub.com%2Fimages%2Fgravatars%2Fgravatar-50.png"
57
+ },
58
+ {
59
+ "service_name": "turnyournameintoaface",
60
+ "url": "^http://turnyournameintoaface.com/\\\?name=([^.\/]+)",
61
+ "iconPageUrl": "http://turnyournameintoaface.com/?name={user_id}",
62
+ "iconImageElement": "\/\/p[@class=\"image\"]\/img",
63
+ "exampleUrl": "http://turnyournameintoaface.com/?name=ucnv",
64
+ "exampleImageUrl": "http://turnyournameintoaface.com/face/10100311.png"
65
+ }
66
+ ]
@@ -0,0 +1,48 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ require "test/unit"
4
+ require 'mocha'
5
+
6
+ REMOTE_TEST = ENV['REMOTE_TEST'] == 'true'
7
+ MOCK_HTML_DIR = File.join 'test', 'html'
8
+
9
+ class AvaticonTest < Test::Unit::TestCase
10
+
11
+ def prepare_stubs service, user_id
12
+ unless REMOTE_TEST
13
+ path = File.join(MOCK_HTML_DIR, [service, user_id].join('_'))
14
+ Avaticon.stubs(:get_html).returns(IO.read(path))
15
+ end
16
+ end
17
+
18
+ def test_siteinfo_example_url
19
+ avt = Avaticon.new
20
+ avt.siteinfo.each do |s|
21
+ m = Regexp.new(s['url']).match(s['exampleUrl'])
22
+ assert m
23
+ assert_equal 2, m.to_a.size
24
+ end
25
+ end
26
+
27
+ def test_get_icon
28
+ avt = Avaticon.new
29
+ avt.siteinfo.each do |s|
30
+ m = Regexp.new(s['url']).match(s['exampleUrl'])
31
+ service = s['service_name']
32
+ user_id = m.to_a[1]
33
+ prepare_stubs service, user_id
34
+ icon_url = avt.get_icon service, user_id
35
+ assert_equal s['exampleImageUrl'], icon_url
36
+ end
37
+ end
38
+
39
+ def test_search_by_url
40
+ avt = Avaticon.new
41
+ s = avt.siteinfo[0]
42
+ m = Regexp.new(s['url']).match(s['exampleUrl'])
43
+ user_id = m.to_a[1]
44
+ prepare_stubs s['service_name'], user_id
45
+ assert_equal s['exampleImageUrl'], avt.search_by_url(s['exampleUrl'])
46
+ end
47
+ end
48
+
@@ -0,0 +1,829 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html>
3
+ <head>
4
+ <title>Flickr: kusaker</title>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6
+ <meta name="keywords" content="photography, digital photography, cameraphones, camera, hobby photography, photo, digital camera, compactflash, smartmedia, cameras, canon, nikon, olympus, fujifilm, video">
7
+ <meta name="description" content="Flickr is almost certainly the best online photo management and sharing application in the world. Show off your favorite photos and videos to the world, securely and privately show content to your friends and family, or blog the photos and videos you take with a cameraphone.">
8
+ <meta http-equiv="imagetoolbar" content="no">
9
+ <meta name="viewport" content="width=820" />
10
+ <link href="http://l.yimg.com/g/css/c_flickr.css.v59787.14" rel="stylesheet" type="text/css">
11
+ <link rel="shortcut icon" type="image/ico" href="/favicon.ico">
12
+ <link href="http://l.yimg.com/g/css/c_profile.css.v35667.14" rel="stylesheet" type="text/css" />
13
+ <link href="http://l.yimg.com/g/css/c_contacts.css.v45805.14" rel="stylesheet" type="text/css" />
14
+ <link href="http://l.yimg.com/g/css/c_search.css.v57483.14" rel="stylesheet" type="text/css" />
15
+
16
+ <!--[if LT IE 7]>
17
+ <style type="text/css">
18
+ .trans_png {
19
+ behavior: url('/javascript/pngbehavior2.htc');
20
+ border:0;
21
+ }
22
+ </style>
23
+ <![endif]-->
24
+
25
+ <link href="http://l.yimg.com/g/css/intl/c_en-us.css.v33225.14" rel="stylesheet" type="text/css">
26
+
27
+ <script type="text/javascript">
28
+ var global_magisterLudi = '48c6bbc703d6a02e51ff6591490f941a',
29
+ global_auth_hash = '89d44653b4f795eb9de5f5e64856b86e',
30
+ global_auth_token = '',
31
+ global_flickr_secret = 'b06793b1c5ccb653',
32
+ global_slideShowVersion = '6708',
33
+ global_slideShowCodeVersion = '34351',
34
+ global_slideShowVersionV2 = '33427',
35
+ global_slideShowCodeVersionV2 = '49745',
36
+ global_slideShowTextVersion = '58886',
37
+ global_slideShowVersionV3 = '59913',
38
+ global_nsid = '',
39
+ global_ispro = 0,
40
+ global_dbid = '',
41
+ global_name ='',
42
+ global_expire ='',
43
+ global_icon_url ='http://l.yimg.com/g/images/buddyicon.jpg#',
44
+ global_tag_limit = '75',
45
+ global_collection_depth_limit = 5,
46
+ global_stewartVersion = '60247',
47
+ global_contact_limit = '3000',
48
+ global_eighteen = 1,
49
+ global_group_limit = 10,
50
+ global_photos_ids_limit = 20,
51
+ disable_stewart = 0;
52
+ disable_geo = 0;
53
+ var global_rper = 0;
54
+
55
+ var global_intl_lang = 'en-us';
56
+
57
+ var _photo_root = 'http://farm.static.flickr.com/';
58
+ var _site_root = 'http://www.flickr.com';
59
+ var _images_root = 'http://l.yimg.com/g/images';
60
+ var _intl_images_root = 'http://l.yimg.com/g/images/en-us';
61
+
62
+
63
+ var do_bbml = 0;
64
+
65
+ </script>
66
+
67
+
68
+ <script type="text/javascript" src="http://l.yimg.com/g/javascript/global.js.v58474.14"></script>
69
+
70
+ <script type="text/javascript">
71
+
72
+ </script>
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+ <script type="text/javascript" src="http://l.yimg.com/g/javascript/fold_main.js.v48851.48851.48851.48851.48851.38771.48851.48851.60501.38771.38771.49635.38771.38771.38771.39083.55689.53587.38771.57388.38771.60180.14"></script>
104
+ <script type="text/javascript" src="http://l.yimg.com/g/javascript/video.js.v55944.14"></script>
105
+ <script type="text/javascript" src="http://l.yimg.com/g/javascript/swfobject.js.v55944.14"></script>
106
+
107
+
108
+ <script type="text/javascript" src="http://l.yimg.com/g/javascript/slideshow3.js.v59253.14"></script>
109
+
110
+ <link href="http://l.yimg.com/g/css/c_sharing.css.v57426.14" rel="stylesheet" type="text/css">
111
+
112
+ <script type="text/javascript" src="http://l.yimg.com/g/javascript/s_output_en-us.js.9cd45e469cef593118863d07b30f5c95"></script>
113
+
114
+ <script type="text/javascript">
115
+
116
+ YAHOO.util.Event.addListener(window, 'load', F._window_onload);
117
+ YAHOO.util.Event.addListener(window, 'resize', F._window_onresize);
118
+ YAHOO.util.Event.addListener(window, 'blur', F._window_onblur);
119
+ YAHOO.util.Event.addListener(window, 'focus', F._window_onfocus);
120
+ YAHOO.util.Event.addListener(window, 'unload', F._window_onunload);
121
+
122
+ </script>
123
+
124
+
125
+
126
+ <script type="text/javascript">
127
+ var global_joinDate = F.convert_unix_time_stamp('');
128
+ var global_time_stamp = '080926164740';
129
+
130
+
131
+ fixMaxWidth_getWidth = (navigator.userAgent.match(/MSIE 6/i)?function(el) {
132
+ return el.currentStyle['max-width'];
133
+ }:function(el){
134
+ return el.currentStyle['maxWidth'];
135
+ });
136
+
137
+ fixMaxWidth = function(el) {
138
+ try {
139
+ el.runtimeStyle.behavior = 'none';
140
+ var mw = fixMaxWidth_getWidth(el);
141
+ var nmw = parseInt(mw,10) || 10000;
142
+ var cW = parseInt(el.offsetWidth);
143
+ var cH = parseInt(el.offsetHeight);
144
+ var ratio = (cH/cW);
145
+ if (el.offsetWidth>nmw) {
146
+ el.style.width = (nmw+'px');
147
+ if (!isNaN(cH) && cH) {
148
+ el.style.height = (Math.ceil(nmw*ratio)+'px');
149
+ }
150
+ }
151
+ } catch(e) {
152
+ // oh well
153
+ }
154
+ }
155
+
156
+
157
+
158
+ // Dean Edwards/Matthias Miller/John Resig
159
+
160
+ /* for Mozilla/Opera9 */
161
+ if (document.addEventListener) {
162
+ document.addEventListener("DOMContentLoaded", F._window_onload_dom, false);
163
+ }
164
+
165
+ /* for Internet Explorer */
166
+ /*@cc_on @*/
167
+ /*@if (@_win32)
168
+ document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
169
+ var script = document.getElementById("__ie_onload");
170
+ script.onreadystatechange = function() {
171
+ if (this.readyState == "complete") {
172
+ F._window_onload_dom(); // call the onload handler
173
+ }
174
+ };
175
+ /*@end @*/
176
+
177
+ /* for Safari */
178
+ if (/WebKit/i.test(navigator.userAgent)) { // sniff
179
+ F.onload_dom_timer = setInterval(function() {
180
+ if (/loaded|complete/.test(document.readyState)) {
181
+ F._window_onload_dom(); // call the onload handler
182
+ }
183
+ }, 10);
184
+ }
185
+
186
+
187
+
188
+ </script>
189
+
190
+ <!--[if IE]>
191
+ <style type="text/css">
192
+
193
+ img.notsowide {
194
+ behavior:expression(fixMaxWidth(this));
195
+ }
196
+
197
+ </style>
198
+ <![endif]-->
199
+
200
+
201
+
202
+
203
+ <body>
204
+
205
+ <div id="beacon"><img src="http://geo.yahoo.com/f?s=792600091&t=d8c6117929c5cfcb968455ebbc3262d5&fl_ev=0&lang=en&intl=us" width="0" height="0" alt="" /></div>
206
+
207
+ <a name="top"></a>
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+ <div class="TopBar" id="TopBar">
217
+ <table cellspacing="0" class="Header" border="0">
218
+ <tr>
219
+ <td class="FlickrLogo">
220
+ <a href="/"><img src="http://l.yimg.com/g/images/flickr_logo_gamma.gif.v59899.14" id="FlickrLogo" width="98" height="26" alt="Flickr logo. If you click it, you'll go home" />
221
+ </a>
222
+ </td>
223
+ <td class="Status">
224
+
225
+
226
+
227
+ You aren't signed in
228
+ &nbsp;&nbsp;&nbsp;
229
+ <a href="/signin/">Sign In</a>
230
+ &nbsp;&nbsp;
231
+ <a href="/help/">Help</a>
232
+ </td>
233
+ </tr>
234
+ </table>
235
+ <table cellspacing="0" class="NavBar" border="0">
236
+ <tr>
237
+ <td class="Primary">
238
+
239
+ <div id="candy_nav_button_bar" class="candy_button_bar">
240
+ <ul class="site_nav_menu_buttons">
241
+
242
+ <li class="no_menu_li"><span><a href="/">Home</a></span></li>
243
+
244
+
245
+ <li class="no_menu_li"><span><a href="/tour/" alt="Take the Flickr tour">The Tour</a></span></li>
246
+
247
+ <li class="no_menu_li"><span><a href="/signup/" alt="Sign Up for a Free Account">Sign Up</a></span></li>
248
+
249
+
250
+
251
+ <li class="menu_li" id="candy_nav_button_explore"><span><a href="/explore/" alt="Explore Flickr">Explore</a> <img src="http://l.yimg.com/g/images/site_nav_caret_split_default.png" class="nav_button_caret" width="18" height="15" alt="More options"></span>
252
+ <div class="candy_menu" id="candy_nav_menu_explore">
253
+ <a href="/explore/">Explore Page</a>
254
+ <a href="/explore/interesting/7days/">Last 7 Days Interesting</a>
255
+ <a href="/photos/tags/">Popular Tags</a>
256
+ <a href="/explore/interesting/2008/09/">Calendar</a>
257
+ <a href="/photos/">Most Recent Uploads</a>
258
+ <a href="/explore/video/">Video on Flickr</a>
259
+ <a href="/analog/">Explore Analog</a>
260
+ <!--<a href="/explore/interesting/2007/09/">A Year Ago Today</a>-->
261
+
262
+ <a title="Photos and videos on a map" href="/map/" class="menu_item_line_above">World Map</a> <a href="/places/">Places</a>
263
+ <a href="/commons/" class="menu_item_line_above">The Commons</a>
264
+ <a href="/creativecommons/">Creative Commons</a>
265
+
266
+ <a href="http://blog.flickr.com/" class="menu_item_line_above">FlickrBlog</a>
267
+ <a href="http://code.flickr.com/">code.flickr</a>
268
+ <a href="/services/">Flickr Services</a>
269
+
270
+ <a href="/do/more/" class="menu_item_line_above">Do More, Order Prints</a>
271
+ <a href="/cameras/">Camera Finder</a> </div>
272
+ </li>
273
+
274
+ </ul>
275
+ </div>
276
+ <script type="text/javascript">F.decorate(_ge('candy_nav_button_bar'), F._nav_button_bar).bar_go_go_go();</script>
277
+
278
+
279
+
280
+ </td>
281
+
282
+
283
+
284
+
285
+
286
+ <td id="search_header_form_td">
287
+ <form action="/search/" method="get" onsubmit="_do_header_search('', 'tags', '/search/', '', '');return false;" id="headersearchform">
288
+ <input name="q" id="header_search_q" type="text" class="Box" value="">
289
+ <input name="w" type="hidden" value="">
290
+ <input name="m" type="hidden" value="tags">
291
+ <input name="s" type="hidden" value="">
292
+ <input name="mt" type="hidden" value="">
293
+ <span id="headersearchbutton1"><input value="Search" type="image" src="http://l.yimg.com/g/images/header_search_button.png" /></span>
294
+ </form>
295
+ </td>
296
+ <td id="search_header_button_td" width="82">
297
+
298
+ <div id="candy_search_button_bar" class="candy_button_bar" style="">
299
+ <ul class="site_nav_menu_buttons">
300
+ <li class="menu_li" id="candy_nav_button_search"><span><a href="/search/" onclick="_do_header_search('', 'tags', '/search/', '', '');return false;">Search</a> <img src="http://l.yimg.com/g/images/site_nav_caret_split_default.png" class="nav_button_caret" width="18" height="15" alt="More options"></span>
301
+ <div class="candy_menu" id="candy_nav_menu_search">
302
+ <a title="Everyone's Uploads" href="/search/" onclick="_do_header_search('all', null, null, null, ''); return false;"><b>&#183;</b> Everyone's Uploads</a>
303
+ <a title="Groups" href="/search/groups/" onclick="_do_header_search('', '', '/search/groups/'); return false;">Groups</a>
304
+ <a title="Flickr Members" href="/search/people/" onclick="_do_header_search('', 'names', '/search/people/'); return false;">Flickr Members</a>
305
+ <a title="For a Location" href="/map/" onclick="_do_header_search('location', '', '/map/'); return false;">For a Location</a>
306
+ </div>
307
+ </li>
308
+ </ul>
309
+ </div>
310
+
311
+ <script type="text/javascript">F.decorate(_ge('candy_nav_button_search'), F._nav_button).button_go_go_go();</script>
312
+
313
+ <script type="text/javascript">
314
+ var b1 = _ge('headersearchbutton1');
315
+ b1.parentNode.removeChild(b1);
316
+
317
+ _ge('search_header_form_td').style.paddingBottom = '2px';
318
+
319
+ _ge('candy_search_button_bar').style.display = 'block';
320
+
321
+
322
+ var f = _ge('headersearchform');
323
+
324
+ if (f.q.value == '') f.q.style.color = '#999';
325
+
326
+ f.q.onfocus = function() {
327
+ if (this.value == '') this.value = '';
328
+ this.style.color = '#222';
329
+ if (window.ymap) ymap._disableKeys = true;
330
+ }
331
+
332
+ f.q.onblur = function() {
333
+ if (this.value != '') return;
334
+ this.style.color = '#999';
335
+ this.value = '';
336
+ if (window.ymap) ymap._disableKeys = false;
337
+ }
338
+
339
+ var _do_header_search = function(w, m, action, s, mt) {
340
+ var f = _ge('headersearchform');
341
+ if (f.q.value == '') f.q.value = '';
342
+ f.q.value = f.q.value.trim();
343
+
344
+
345
+ // do location search if the location search window is open, or if w == 'location'
346
+ if (w == 'location' || (_ge('loc_search_div') && _ge('loc_search_div').style.display != 'none')) {
347
+ if (!_ge('loc_search_div')) {
348
+ // create the location search crap!
349
+ var div = document.createElement('div');
350
+ div.id = 'loc_search_div';
351
+ document.body.appendChild(div);
352
+
353
+ var page_type = 'site';
354
+ F.decorate(div, F._loc_search_div).div_go_go_go(page_type);
355
+ }
356
+ try {_ge('loc_search_div').div_do_loc_search()} catch(err) {writeDebug(err)};return false;
357
+ return;
358
+ }
359
+
360
+
361
+
362
+
363
+ f.w.value = w;
364
+ f.m.value = (m) ? m : '';
365
+ f.s.value = (s) ? s : '';
366
+ f.mt.value = (mt) ? mt : '';
367
+ f.action = (action) ? action : '/search/';
368
+
369
+ if (f.m.value == 'tags' && f.q.value && f.q.value.indexOf(' ') == -1) {
370
+ var alias = '';
371
+ alias = (alias) ? alias : f.w.value;
372
+ var turl = '/photos/';
373
+ if (f.w.value == 'all') {
374
+ turl+= 'tags/'+encodeURIComponent(f.q.value);
375
+ } else {
376
+ turl+= alias+'/tags/'+encodeURIComponent(f.q.value);
377
+ }
378
+ document.location = turl;
379
+ return;
380
+ }
381
+
382
+ var qsA = ['q='+encodeURIComponent(f.q.value)];
383
+ if (f.w.value) qsA.push('w='+encodeURIComponent(f.w.value));
384
+ if (f.m.value) qsA.push('m='+encodeURIComponent(f.m.value));
385
+ if (f.s.value) qsA.push('s='+encodeURIComponent(f.s.value));
386
+ if (f.mt.value) qsA.push('mt='+encodeURIComponent(f.mt.value));
387
+
388
+ var surl = f.action+'?'+qsA.join('&');
389
+ document.location = surl;
390
+ }
391
+
392
+
393
+ </script>
394
+
395
+ </td>
396
+ </tr>
397
+ </table>
398
+ </div>
399
+
400
+ <div id="Main" >
401
+
402
+ <div class="vcard">
403
+
404
+
405
+
406
+ <table width="800" cellspacing="0" id="SubNav">
407
+ <tr>
408
+ <td class="Buddy">
409
+ <a href="/photos/kusaker/"><img src="http://farm1.static.flickr.com/128/buddyicons/39255132@N00.jpg?1169585056#39255132@N00" alt="to kusaker's photostream page" width="48" height="48" class="logo" /></a>
410
+ </td>
411
+ <td class="Section">
412
+ <h1>
413
+ About <span class="nickname">kusaker</span>
414
+ <span class="RealName">/ <span class="fn n"><span class="given-name">kusaker</span></span></span> </h1>
415
+ <p class="Links">
416
+ <a href="/photos/kusaker/" rel="me">&larr; Photostream</a>
417
+
418
+
419
+ </p>
420
+ </td>
421
+
422
+ </tr>
423
+ </table>
424
+
425
+
426
+
427
+
428
+
429
+ <table id="ProfileInfo" cellspacing="0" width="100%">
430
+ <tr valign="top">
431
+ <td id="Left">
432
+
433
+ <!-- ############################### -->
434
+
435
+ <div class="About">
436
+ <p class="note"><img class="notsowide" src="http://gyazo.com/2d43ccb535344e4e9672ad415afdb446.png" /><br />
437
+ <br />
438
+ <strong>Activity: </strong><br />
439
+ <a href="http://tako3.com/http://flickr.com/photos/kusaker/">http://tako3.com/http://flickr.com/photos/kusaker/</a><br />
440
+ <br />
441
+ <strong>Hardware: </strong><br />
442
+ <a href="http://www.flickr.com/cameras/canon/powershot_sd550/">IXY Digital 700</a> Canon</p>
443
+ <p>
444
+ I'm <strong>Male</strong>.
445
+
446
+
447
+ </p>
448
+ <p>
449
+ <span class="adr"><span class="locality">Kodaira / Yokohama</span>, <span class="country-name">Japan</span></span>
450
+ </p>
451
+ </div>
452
+
453
+ <!-- ############################### -->
454
+
455
+
456
+ <h3>
457
+ kusaker's contacts
458
+ (<a href="/people/kusaker/contacts/" rel="me">80</a>)
459
+ </h3>
460
+
461
+
462
+ <div class="RecentContacts">
463
+ <p>
464
+ <a href="/photos/umelabo/" rel="contact">
465
+ <img src="http://farm4.static.flickr.com/3208/buddyicons/7754708@N08.jpg?1215610488#7754708@N08" alt="umelabo" width="48" height="48" /><br />
466
+ umelabo</a>
467
+ </p> <p>
468
+ <a href="/photos/30348100@N08/" rel="contact">
469
+ <img src="http://farm4.static.flickr.com/3236/buddyicons/30348100@N08.jpg?1220760343#30348100@N08" alt="fujishirolie" width="48" height="48" /><br />
470
+ fujishirolie</a>
471
+ </p> <p>
472
+ <a href="/photos/25386005@N02/" rel="contact">
473
+ <img src="http://l.yimg.com/g/images/buddyicon.jpg#25386005@N02" alt="nanigashi" width="48" height="48" /><br />
474
+ nanigashi</a>
475
+ </p> <p>
476
+ <a href="/photos/27211277@N04/" rel="contact">
477
+ <img src="http://farm4.static.flickr.com/3164/buddyicons/27211277@N04.jpg?1212232596#27211277@N04" alt="sioameumai" width="48" height="48" /><br />
478
+ sioameumai</a>
479
+ </p> <p>
480
+ <a href="/photos/hrykm169/" rel="contact">
481
+ <img src="http://farm3.static.flickr.com/2336/buddyicons/90939917@N00.jpg?1192787253#90939917@N00" alt="怪獣ヒロン" width="48" height="48" /><br />
482
+ 怪獣ヒロン</a>
483
+ </p> <p>
484
+ <a href="/photos/kagawa/" rel="contact">
485
+ <img src="http://farm1.static.flickr.com/34/buddyicons/19717110@N00.jpg?1206735041#19717110@N00" alt="kagawa3" width="48" height="48" /><br />
486
+ kagawa3</a>
487
+ </p> <p>
488
+ <a href="/photos/8331703@N04/" rel="contact">
489
+ <img src="http://l.yimg.com/g/images/buddyicon.jpg#8331703@N04" alt="dig-t" width="48" height="48" /><br />
490
+ dig-t</a>
491
+ </p> <p>
492
+ <a href="/photos/kuzirawhale/" rel="contact">
493
+ <img src="http://farm1.static.flickr.com/224/buddyicons/55623505@N00.jpg?1178033907#55623505@N00" alt="kuzirawhale" width="48" height="48" /><br />
494
+ kuzirawhale</a>
495
+ </p> <p>
496
+ <a href="/photos/h3f3f/" rel="contact">
497
+ <img src="http://farm1.static.flickr.com/23/buddyicons/63211198@N00.jpg?1121084879#63211198@N00" alt="h3f3f" width="48" height="48" /><br />
498
+ h3f3f</a>
499
+ </p> <p>
500
+ <a href="/photos/notohiro/" rel="contact">
501
+ <img src="http://farm4.static.flickr.com/3163/buddyicons/24112745@N07.jpg?1219129128#24112745@N07" alt="notohiro" width="48" height="48" /><br />
502
+ notohiro</a>
503
+ </p>
504
+ <p class="MoreContacts">
505
+ <a href="/people/kusaker/contacts/" rel="me">More...</a>
506
+ </p>
507
+ </div>
508
+ <br clear="all" />
509
+
510
+ <h3>kusaker's public groups</h3>
511
+
512
+ <table class="Stats">
513
+ <tr>
514
+ <td width="50%">
515
+ <ul>
516
+ <li>
517
+ <a href="/groups/rightasrain/">Right as Rain</a>
518
+ </li>
519
+ <li>
520
+ <a href="/groups/11947580@N00/">Night Images</a>
521
+ </li>
522
+ <li>
523
+ <a href="/groups/japanese-food/">Japanese Food</a>
524
+ </li>
525
+ <li>
526
+ <a href="/groups/20077958@N00/">Museum</a>
527
+ </li>
528
+ <li>
529
+ <a href="/groups/34062645@N00/">iPodCentral</a>
530
+ </li>
531
+ <li>
532
+ <a href="/groups/greenisbeautiful/">Green is Beautiful</a>
533
+ </li>
534
+ <li>
535
+ <a href="/groups/reflections/">Reflections</a>
536
+ </li>
537
+ <li>
538
+ <a href="/groups/fireworks/">Fireworks</a>
539
+ </li>
540
+ <li>
541
+ <a href="/groups/78418589@N00/">Yokohama</a>
542
+ </li>
543
+ <li>
544
+ <a href="/groups/79171409@N00/">subway</a>
545
+ </li>
546
+ <li>
547
+ <a href="/groups/jlandscape/">Japanese Landscape - 日本の風景写真 -</a>
548
+ </li>
549
+ <li>
550
+ <a href="/groups/68004195@N00/">Full Moon</a>
551
+ </li>
552
+ <li>
553
+ <a href="/groups/tokyo-sky/">TOKYO SKY</a>
554
+ </li>
555
+ <li>
556
+ <a href="/groups/tokyoimages/">Tokyo Images</a>
557
+ </li>
558
+ <li>
559
+ <a href="/groups/windowsnaps/">Just Windows!</a>
560
+ </li>
561
+ <li>
562
+ <a href="/groups/towerblock/">tower block</a>
563
+ </li>
564
+ <li>
565
+ <a href="/groups/geotagging/">GeoTagging Flickr</a>
566
+ </li>
567
+ <li>
568
+ <a href="/groups/64605954@N00/">Kanji</a>
569
+ </li>
570
+ <li>
571
+ <a href="/groups/95576359@N00/">Reflections of...</a>
572
+ </li>
573
+ <li>
574
+ <a href="/groups/processing/">Processing.org</a>
575
+ </li>
576
+ <li>
577
+ <a href="/groups/sunsetpix/">SUNSET&amp;RISEPIX</a>
578
+ </li>
579
+ <li>
580
+ <a href="/groups/wiring/">wiring / 配線</a>
581
+ </li>
582
+ <li>
583
+ <a href="/groups/hitomoji/">Hito Moji</a>
584
+ </li>
585
+ <li>
586
+ <a href="/groups/highways_ramps/">highway overpasses &amp; ramps</a>
587
+ </li>
588
+ </ul>
589
+ </td>
590
+ <td width="50%">
591
+ <ul>
592
+ <li>
593
+ <a href="/groups/50167249@N00/">I Love Tokyo Tower</a>
594
+ </li>
595
+ <li>
596
+ <a href="/groups/aperture_users/">Aperture Users</a>
597
+ </li>
598
+ <li>
599
+ <a href="/groups/train_station/">Train、Station &amp; Terminal</a>
600
+ </li>
601
+ <li>
602
+ <a href="/groups/japan_directory_nihon/">JAPAN [directory] 日本</a>
603
+ </li>
604
+ <li>
605
+ <a href="/groups/ilovetrains/">I Love Trains</a>
606
+ </li>
607
+ <li>
608
+ <a href="/groups/slow/"> Slow Shutter Speed</a>
609
+ </li>
610
+ <li>
611
+ <a href="/groups/views100/">Views: 100</a>
612
+ </li>
613
+ <li>
614
+ <a href="/groups/48652386@N00/">JAPANESE TRAIN RAILS</a>
615
+ </li>
616
+ <li>
617
+ <a href="/groups/peopleinpublictransport/">People in Public Transport</a>
618
+ </li>
619
+ <li>
620
+ <a href="/groups/ixy700/">Canon IXY 700</a>
621
+ </li>
622
+ <li>
623
+ <a href="/groups/japanese-typography/">Japanese Typography</a>
624
+ </li>
625
+ <li>
626
+ <a href="/groups/muji360/">MUJI / 無印良品</a>
627
+ </li>
628
+ <li>
629
+ <a href="/groups/1000views-of-tokyotower/">東京タワー千景 (1000 Views of Tokyo Tower)</a>
630
+ </li>
631
+ <li>
632
+ <a href="/groups/japanrail/">[JR] Japan Rail</a>
633
+ </li>
634
+ <li>
635
+ <a href="/groups/night_reflections/">Night Reflection</a>
636
+ </li>
637
+ <li>
638
+ <a href="/groups/japanesesigns/">Japanese Signs / 日本語の標識</a>
639
+ </li>
640
+ <li>
641
+ <a href="/groups/dejavuphotos/">Deja Vu (Two photos that look the same despite being different)</a>
642
+ </li>
643
+ <li>
644
+ <a href="/groups/60179787@N00/">World from a train</a>
645
+ </li>
646
+ <li>
647
+ <a href="/groups/tanuki/">狸</a>
648
+ </li>
649
+ <li>
650
+ <a href="/groups/weihnachten/">weihnachten? ist mir doch egal</a>
651
+ </li>
652
+ <li>
653
+ <a href="/groups/kanji/">Kanji 漢字</a>
654
+ </li>
655
+ <li>
656
+ <a href="/groups/49527651@N00/">the colour of the sky</a>
657
+ </li>
658
+ <li>
659
+ <a href="/groups/346041@N23/">Seibu Railways of Tokyo and Saitama (西武線), Japan.</a>
660
+ </li>
661
+ <li>
662
+ <a href="/groups/24flickr/">24 hours of Flickr</a>
663
+ </li>
664
+ </ul>
665
+ </td>
666
+ </tr>
667
+ </table>
668
+
669
+
670
+ <h3>A bit more about kusaker...</h3>
671
+ <table class="Stats">
672
+ <tr>
673
+ <td width="25%">Hometown:</td>
674
+ <td>Shinagawa</td>
675
+ </tr>
676
+ <tr>
677
+ <td width="25%">Occupation:</td>
678
+ <td class="title">University student</td>
679
+ </tr>
680
+ </table>
681
+
682
+ </td>
683
+ <td id="Right">
684
+ <h3>Testimonials </h3>
685
+
686
+
687
+
688
+ <p>kusaker doesn't have any testimonials yet.</p>
689
+
690
+
691
+
692
+ <!-- IF ISN'T IGNORED -->
693
+
694
+
695
+
696
+ <img src="http://l.yimg.com/g/images/spaceball.gif" alt="spacer image" width="200" height="1" />
697
+
698
+ </td>
699
+ </tr>
700
+ </table>
701
+
702
+ </div>
703
+
704
+
705
+ </div>
706
+
707
+ <br id="MainFooterClear" clear="all" />
708
+
709
+ <div id="FooterWrapper">
710
+ <div class="Footer">
711
+
712
+ <table class="Jump" cellspacing="0">
713
+
714
+ <tr>
715
+ <th class="To">
716
+ You
717
+ </th>
718
+ <td>
719
+ <a href="/signin/">Sign in</a> |
720
+ <a href="/signup/">Create Your Free Account</a>
721
+ </td>
722
+ </tr>
723
+ <tr>
724
+ <th class="To">
725
+ <a href="/explore/" class="Plain">Explore</a>
726
+ </th>
727
+ <td>
728
+ <a href="/places/">Places</a> |
729
+ <a href="/explore/interesting/7days/">Last 7 Days</a> |
730
+ <a href="/explore/interesting/2008/09/">This Month</a> |
731
+ <a href="/photos/tags/">Popular Tags</a> |
732
+ <a href="/commons/">The Commons</a> |
733
+ <a href="/creativecommons/">Creative Commons</a> |
734
+ <a href="/search/">Search</a>
735
+ </td>
736
+ </tr>
737
+ <tr>
738
+ <th class="To">
739
+ <a href="/help/" class="Plain">Help</a>
740
+ </th>
741
+ <td>
742
+ <a href="/guidelines.gne">Community Guidelines</a> |
743
+ <a href="/help/forum/">The Help Forum</a> |
744
+
745
+ <a href="/help/faq/">FAQ</a> |
746
+ <a href="/sitemap.gne">Sitemap</a> |
747
+ <a href="/help/contact/">Help by Email</a>
748
+ </td>
749
+ </tr>
750
+ </table>
751
+ <div class="Delicious">
752
+ <a href="http://del.icio.us/post"
753
+ onclick="window.open('http://delicious.com/save?partner=flickr&amp;v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent(location.href)+'&amp;title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;"><img src="http://l.yimg.com/g/images/add_to_delicious.gif.v1" width="10" height="10" /> &nbsp;Save to Delicious</a>
754
+ </div>
755
+
756
+ <p class="About">
757
+
758
+ <span class="yahoo_logo">
759
+ <a href="http://www.yahoo.com"><img src="http://l.yimg.com/g/images/logo_yahoo_company.gif.v11691.14" width="99" height="11" alt="Flickr, a Yahoo! Company" /></a>
760
+ </span>
761
+
762
+ <a href="http://blog.flickr.net/">Flickr Blog</a> |
763
+ <a href="/about/">About Flickr</a> |
764
+ <a href="/terms.gne" onClick="window.open('/terms.gne','TOC','status=yes,scrollbars=yes,resizable=yes,width=600,height=480'); return false">Terms of Use</a> |
765
+ <a href="/privacy_policy.gne">Your Privacy</a> |
766
+ <a href="http://docs.yahoo.com/info/copyright/copyright.html" target="_blank">Copyright/IP Policy</a> | <a id="ft-report-abuse" href="/report_abuse.gne">Report Abuse</a>
767
+
768
+ <p class="LanguageSelector">
769
+
770
+
771
+ <span>
772
+ <a href="/change_language.gne?lang=zh-hk&magic_cookie=89d44653b4f795eb9de5f5e64856b86e" class="image_link" id="lang_zh-hk"><img src="http://l.yimg.com/g/images/lang_zh-tw_11px_default.png" width="45" height="13" id="langselect_zh-hk" alt="繁體中文"></a> <b>|</b>
773
+ <a href="/change_language.gne?lang=de-de&magic_cookie=89d44653b4f795eb9de5f5e64856b86e" >Deutsch</a>
774
+ <b>|</b>
775
+ <a href="/change_language.gne?lang=en-us&magic_cookie=89d44653b4f795eb9de5f5e64856b86e" class="selected">English</a>
776
+ <b>|</b>
777
+ <a href="/change_language.gne?lang=es-us&magic_cookie=89d44653b4f795eb9de5f5e64856b86e" >Espa&#241;ol</a>
778
+ <b>|</b>
779
+ <a href="/change_language.gne?lang=fr-fr&magic_cookie=89d44653b4f795eb9de5f5e64856b86e" >Fran&#231;ais</a>
780
+ <b>|</b>
781
+ <a href="/change_language.gne?lang=ko-kr&magic_cookie=89d44653b4f795eb9de5f5e64856b86e" class="image_link" id="lang_ko-kr"><img src="http://l.yimg.com/g/images/lang_ko-kr_11px_default.png" width="23" height="13" id="langselect_ko-kr" alt="한글"></a> <b>|</b>
782
+ <a href="/change_language.gne?lang=it-it&magic_cookie=89d44653b4f795eb9de5f5e64856b86e" >Italiano</a>
783
+ <b>|</b>
784
+ <a href="/change_language.gne?lang=pt-br&magic_cookie=89d44653b4f795eb9de5f5e64856b86e" >Portugu&#234;s</a>
785
+ </span>
786
+
787
+ <script type="text/javascript">if (_ge('langselect_zh-hk')) F.decorate(_ge('langselect_zh-hk'), F._link_button).button_go_go_go();</script>
788
+ <script type="text/javascript">if (_ge('langselect_ko-kr')) F.decorate(_ge('langselect_ko-kr'), F._link_button).button_go_go_go();</script>
789
+ Copyright &copy; 2008 Yahoo! Inc. All rights reserved.
790
+ </p> </p>
791
+
792
+
793
+ <br />
794
+
795
+
796
+ </div>
797
+ </div>
798
+ <div style="background: #000; color: #0f0; text-align: left; font-family: &quot;Courier New&quot;, Courier, monospace;"></div>
799
+
800
+
801
+
802
+
803
+
804
+ <script type="text/javascript">
805
+ try{
806
+ if (window.personmenu_init) personmenu_init(0);
807
+ } catch(er) {}
808
+
809
+ </script>
810
+
811
+
812
+
813
+
814
+ <!-- page generated by www21 (in mud) at 16:47:40 09/26/08 in 418ms -->
815
+
816
+
817
+ <script src="http://us.adserver.yahoo.com/a?f=792600091&p=flickr&l=FOOT9&c=r"></script>
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+ </body>
829
+ </html>