croudia 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +22 -0
  4. data/README.md +29 -0
  5. data/Rakefile +2 -0
  6. data/croudia.gemspec +21 -0
  7. data/lib/croudia/api.rb +5 -0
  8. data/lib/croudia/identity.rb +39 -0
  9. data/lib/croudia/scraper/friendships.rb +33 -0
  10. data/lib/croudia/scraper/login.rb +40 -0
  11. data/lib/croudia/scraper/parser/users.rb +53 -0
  12. data/lib/croudia/scraper/parser/voices.rb +32 -0
  13. data/lib/croudia/scraper/parser.rb +13 -0
  14. data/lib/croudia/scraper/users.rb +20 -0
  15. data/lib/croudia/scraper/voices.rb +27 -0
  16. data/lib/croudia/scraper.rb +62 -0
  17. data/lib/croudia/user.rb +43 -0
  18. data/lib/croudia/version.rb +3 -0
  19. data/lib/croudia/voice.rb +21 -0
  20. data/lib/croudia.rb +23 -0
  21. data/spec/croudia/api_spec.rb +7 -0
  22. data/spec/croudia/identity_spec.rb +65 -0
  23. data/spec/croudia/scraper/friendships_spec.rb +61 -0
  24. data/spec/croudia/scraper/login_spec.rb +135 -0
  25. data/spec/croudia/scraper/parser/users_spec.rb +256 -0
  26. data/spec/croudia/scraper/parser/voices_spec.rb +119 -0
  27. data/spec/croudia/scraper/users_spec.rb +74 -0
  28. data/spec/croudia/scraper/voices_spec.rb +92 -0
  29. data/spec/croudia/scraper_spec.rb +120 -0
  30. data/spec/croudia/user_spec.rb +43 -0
  31. data/spec/croudia/version_spec.rb +7 -0
  32. data/spec/croudia/voice_spec.rb +16 -0
  33. data/spec/croudia_spec.rb +49 -0
  34. data/spec/fixtures/follower_wktk.html +89 -0
  35. data/spec/fixtures/following_wktk.html +89 -0
  36. data/spec/fixtures/user_wktk1.html +72 -0
  37. data/spec/fixtures/user_wktk2.html +75 -0
  38. data/spec/fixtures/user_wktk3.html +83 -0
  39. data/spec/fixtures/voices_reply_list.html +55 -0
  40. data/spec/fixtures/voices_timeline.html +60 -0
  41. data/spec/fixtures/voices_written.html +20 -0
  42. data/spec/helper.rb +32 -0
  43. metadata +157 -0
@@ -0,0 +1,120 @@
1
+ require 'helper'
2
+
3
+ describe Croudia::Scraper do
4
+ describe '#initialize' do
5
+ context 'when giving a block' do
6
+ it 'sets instance variables using block' do
7
+ Croudia::Scraper.new { |cr| cr.endpoint = 'http://wktk.in' }.
8
+ endpoint.should eq 'http://wktk.in'
9
+ end
10
+
11
+ it 'uses the default setting if not set' do
12
+ Croudia::Scraper.new { |_| }.endpoint.should eq Croudia.endpoint
13
+ end
14
+
15
+ it 'sets @user_agent to @agent.user_agent' do
16
+ Croudia::Scraper.new { |cr| cr.user_agent = 'HelloHello!!!' }.user_agent.should eq 'HelloHello!!!'
17
+ end
18
+ end
19
+
20
+ context 'when giving arguments' do
21
+ before do
22
+ stub_any('/').to_return(:status => 302, :headers => { :location => Croudia.endpoint + '/voices/timeline' })
23
+ stub_get('/voices/timeline').to_return(:body => '', :headers => {:content_type => 'text/html'})
24
+ end
25
+
26
+ it 'logs in using arguments if 2 args provided' do
27
+ Croudia::Scraper.new('username', 'password')
28
+ a_post('/').should have_been_made
29
+ end
30
+
31
+ it 'does not log in if args.size is less than 2' do
32
+ Croudia::Scraper.new('username')
33
+ a_post('/').should_not have_been_made
34
+ end
35
+ end
36
+ end
37
+
38
+ describe '#get' do
39
+ it 'gets the correct resource' do
40
+ stub_get('/correct_resource').to_return(:headers => {:content_type => 'text/html'})
41
+ Croudia::Scraper.new.get('/correct_resource')
42
+ a_get('/correct_resource').should have_been_made
43
+ end
44
+
45
+ it 'can query params' do
46
+ stub_get('/hi?saying=hello').to_return(:headers => {:content_type => 'text/html'})
47
+ Croudia::Scraper.new.get('/hi', :saying => 'hello')
48
+ a_get('/hi?saying=hello').should have_been_made
49
+ end
50
+ end
51
+
52
+ describe '#post' do
53
+ it 'posts to the correct resource' do
54
+ stub_post('/correct_resource').to_return(:headers => {:content_type => 'text/html'})
55
+ Croudia::Scraper.new.post('/correct_resource')
56
+ a_post('/correct_resource').should have_been_made
57
+ end
58
+
59
+ it 'can query params' do
60
+ stub_post('/hi').to_return(:headers => {:content_type => 'text/html'})
61
+ Croudia::Scraper.new.post('/hi', :saying => 'hello')
62
+ a_post('/hi').with(:body => /saying=hello/).should have_been_made
63
+ end
64
+
65
+ it 'adds csrf-token to the query' do
66
+ stub_post('/hi').to_return(:headers => {:content_type => 'text/html'})
67
+ croudia = Croudia::Scraper.new
68
+ croudia.instance_variable_set('@authenticity_token', 'foofoo')
69
+ croudia.post('/hi')
70
+ a_post('/hi').with(:body => /authenticity_token=foofoo/).should have_been_made
71
+ end
72
+ end
73
+
74
+ describe '#pick_token' do
75
+ it 'picks the csrf-token if it is defined in the document' do
76
+ stub_get('/wktk').to_return(:body => fixture('user_wktk1'), :headers => {:content_type => 'text/html'})
77
+ croudia = Croudia::Scraper.new
78
+ croudia.get('/wktk')
79
+ croudia.instance_variable_get('@authenticity_token').should eq 'dummy_csrf_token'
80
+ end
81
+ end
82
+
83
+ describe '#endpoint' do
84
+ it 'returns the current endpoint' do
85
+ Croudia::Scraper.new.endpoint.should eq 'https://croudia.com'
86
+ end
87
+ end
88
+
89
+ describe '#endpoint=' do
90
+ it 'can set self.endpoint' do
91
+ croudia = Croudia::Scraper.new
92
+ croudia.endpoint = 'http://wktk.in'
93
+ croudia.endpoint.should eq 'http://wktk.in'
94
+ end
95
+ end
96
+
97
+ describe '#user_agent' do
98
+ it 'returns the current user_agent' do
99
+ Croudia::Scraper.new.user_agent.should eq "The Croudia Gem/#{Croudia::VERSION} (https://github.com/wktk/croudia-gem)"
100
+ end
101
+
102
+ it 'is the same value to @agent.user_agent' do
103
+ (c = Croudia::Scraper.new).user_agent.should eq c.agent.user_agent
104
+ end
105
+ end
106
+
107
+ describe '#user_agent=' do
108
+ it 'can set self.user_agent' do
109
+ croudia = Croudia::Scraper.new
110
+ croudia.user_agent = 'Foofoo'
111
+ croudia.user_agent.should eq 'Foofoo'
112
+ end
113
+
114
+ it 'sets it to @agent.user_agent' do
115
+ croudia = Croudia::Scraper.new
116
+ croudia.user_agent = 'Barbar'
117
+ croudia.agent.user_agent.should eq 'Barbar'
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,43 @@
1
+ require 'helper'
2
+
3
+ describe Croudia::User do
4
+ describe '#to_s' do
5
+ it 'returns username' do
6
+ Croudia::User.new(:username => 'wktk').to_s.should eq 'wktk'
7
+ end
8
+ end
9
+
10
+ describe '#initialize' do
11
+ it 'sets @username as @id' do
12
+ Croudia::User.new(:username => 'wktk').id.should eq 'wktk'
13
+ end
14
+
15
+ it 'converts spreadia into an Integer' do
16
+ Croudia::User.new(:spreadia => '10').spreadia.should eq 10
17
+ end
18
+
19
+ it 'converts favodia into an Integer' do
20
+ Croudia::User.new(:spreadia => '11').spreadia.should eq 11
21
+ end
22
+ end
23
+
24
+ describe '#==' do
25
+ it 'returns true if usernames are the same' do
26
+ user1 = Croudia::User.new(:username => 'wktk', :name => 'wktk')
27
+ user2 = Croudia::User.new(:username => 'wktk', :name => 'wktk!!')
28
+ (user1 == user2).should be_true
29
+ end
30
+
31
+ it 'returns false if usernames are different' do
32
+ user1 = Croudia::User.new(:username => 'wktk', :name => 'wktk')
33
+ user2 = Croudia::User.new(:username => 'croudia', :name => 'wktk')
34
+ (user1 == user2).should be_false
35
+ end
36
+
37
+ it 'returns false if classes are different' do
38
+ user1 = Croudia::User.new(:username => 'wktk', :name => 'wktk')
39
+ user2 = { :username => 'wktk', :name => 'wktk' }
40
+ (user1 == user2).should be_false
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ describe 'Croudia::VERSION' do
4
+ it 'is a version string' do
5
+ Croudia::VERSION.should be_a String
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ require 'helper'
2
+
3
+ describe Croudia::Voice do
4
+ describe '#to_s' do
5
+ it 'returns "@username: text"' do
6
+ user = Croudia::User.new(:username => 'wktk')
7
+ Croudia::Voice.new(:user => user, :desc => 'Hello!').to_s.should eq '@wktk: Hello!'
8
+ end
9
+ end
10
+
11
+ describe '#to_i' do
12
+ it 'returns ID in Integer' do
13
+ Croudia::Voice.new(:id => '10', :desc => 'Hello!').to_i.should eq 10
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,49 @@
1
+ require 'helper'
2
+
3
+ describe Croudia do
4
+ context 'when delegating to Croudia::Scraper' do
5
+ before do
6
+ stub_get('/wktk').to_return(:body => fixture('user_wktk1'),
7
+ :headers => { :content_type => 'text/html' })
8
+ end
9
+
10
+ it 'should get the correct resource' do
11
+ Croudia.user('wktk')
12
+ a_get('/wktk').should have_been_made
13
+ end
14
+
15
+ it 'returns the same result to Croudia::Scraper' do
16
+ Croudia.user('wktk').should eq Croudia::Scraper.new.user('wktk')
17
+ end
18
+ end
19
+
20
+ describe '.scraper' do
21
+ it 'returns a Croudia::Scraper' do
22
+ Croudia.scraper.should be_a Croudia::Scraper
23
+ end
24
+ end
25
+
26
+ describe '.new' do
27
+ it 'returns a Croudia::Scraper' do
28
+ Croudia.new.should be_a Croudia::Scraper
29
+ end
30
+ end
31
+
32
+ describe '.client' do
33
+ it 'returns a Croudia::Scraper' do
34
+ Croudia.client.should be_a Croudia::Scraper
35
+ end
36
+ end
37
+
38
+ describe '.respond_to?' do
39
+ it 'delegates to Croudia::Scraper' do
40
+ Croudia.respond_to?(:user).should be_true
41
+ end
42
+ end
43
+
44
+ describe '.endpoint' do
45
+ it 'returns the default endpoint' do
46
+ Croudia.endpoint.should eq 'https://croudia.com'
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,89 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Croudia(クローディア)</title>
6
+ <meta content="authenticity_token" name="csrf-param">
7
+ <meta content="dummy_csrf_token" name="csrf-token">
8
+ </head>
9
+ <body>
10
+ <div data-role="page" data-dom-cache="false" class="no-cache" data-url="/follows/follower/wktk" data-id="hedder1" id="follower">
11
+ <div data-role="content">
12
+ <ul data-role="listview" data-split-icon="gear" id="follower_list" data-theme="c" data-dividertheme="i">
13
+ <li data-role="list-divider" class="bar">@wktkのフォロワー</li>
14
+ <li>
15
+ <a href="/follower1">
16
+ <img src="/avatar1" alt="follower 1" class="ui-li-icon avatar">
17
+ <p>
18
+ <span class="bord">follower 1</span>
19
+ <span class="gray">@follower1</span>
20
+ </p>
21
+ <!--
22
+ フォロー:8<br>
23
+ フォロワー:7
24
+ <a href="/follows/menu" data-rel="dialog" data-transition="slideup"></a>-->
25
+ <p class="fontg" style="font-size:12px;">
26
+
27
+ Description 1
28
+
29
+ <br>
30
+ <p class="font1" style="color:#5b9984;font-weight: normal">@follower1をフォローしています</p>
31
+ </p>
32
+ </a>
33
+ </li>
34
+ <li>
35
+ <a href="/follower2">
36
+ <img src="/avatar2" alt="follower 2" class="ui-li-icon avatar">
37
+ <p>
38
+ <span class="bord">follower 2</span>
39
+ <span class="gray">@follower2</span>
40
+ </p>
41
+ <!--
42
+ フォロー:8<br>
43
+ フォロワー:7
44
+ <a href="/follows/menu" data-rel="dialog" data-transition="slideup"></a>-->
45
+ <p class="fontg" style="font-size:12px;">
46
+
47
+ Description 2
48
+
49
+ <br>
50
+ <p class="font1" style="color:#e53b3b;font-weight: normal">@follower2をフォローしていません</p>
51
+ </p>
52
+ </a>
53
+ </li>
54
+ <li>
55
+ <a href="/follower3">
56
+ <img src="/avatar3" alt="follower 3" class="ui-li-icon avatar">
57
+ <p>
58
+ <span class="bord">follower 3</span>
59
+ <span class="gray">@follower3</span>
60
+ </p>
61
+ <!--
62
+ フォロー:8<br>
63
+ フォロワー:7
64
+ <a href="/follows/menu" data-rel="dialog" data-transition="slideup"></a>-->
65
+ <p class="fontg" style="font-size:12px;">
66
+
67
+ Description 3
68
+
69
+ <br>
70
+ </p>
71
+ </a>
72
+ </li>
73
+ </ul>
74
+ <br>
75
+ </div><!-- /content -->
76
+ <div data-role="footer" class="footer-docs" data-theme="b" data-position="fixed" data-id="fotter1">
77
+ <div data-role="navbar" data-iconpos="top" class="footer_navber" >
78
+ <ul>
79
+ <li><a href="/" data-icon="home" rel="external"><span class="small">ホーム</span></a></li>
80
+ <li><a href="/search/all_voice" data-icon="grid" rel="external"><span class="small">Pub</span></a></li>
81
+ <li><a href="/users/redirect_user" data-icon="info"><span class="small">プロフ</span></a></li>
82
+ <li><a href="/settings/account" data-icon="gear"><span class="small">設定</span></a></li>
83
+ <li><a href="JavaScript:scrollTo(0,0)" data-icon="arrow-u"><span class="small">上へ</span></a></li>
84
+ </ul>
85
+ </div><!-- /navbar -->
86
+ </div><!-- /footer -->
87
+ </div><!-- /page -->
88
+ </body>
89
+ </html>
@@ -0,0 +1,89 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Croudia(クローディア)</title>
6
+ <meta content="authenticity_token" name="csrf-param">
7
+ <meta content="dummy_csrf_token" name="csrf-token">
8
+ </head>
9
+ <body>
10
+ <div data-role="page" data-dom-cache="false" class="no-cache" data-url="/follows/following/wktk" data-id="hedder1" id="following">
11
+ <div data-role="content">
12
+ <ul data-role="listview" data-split-icon="gear" id="following_list" data-theme="c" data-dividertheme="i">
13
+ <li data-role="list-divider" class="bar">@wktkのフォロー</li>
14
+ <li>
15
+ <a href="/following1">
16
+ <img src="/avatar1" alt="following 1" class="ui-li-icon avatar">
17
+ <p>
18
+ <span class="bord">following 1</span>
19
+ <span class="gray">@following1</span>
20
+ </p>
21
+ <!--
22
+ フォロー:8<br>
23
+ フォロワー:7
24
+ <a href="/follows/menu" data-rel="dialog" data-transition="slideup"></a>-->
25
+ <p class="fontg" style="font-size:12px;">
26
+
27
+ Description 1
28
+
29
+ <br>
30
+ <p class="font1" style="color:#5b9984;font-weight: normal">@following1をフォローしています</p>
31
+ </p>
32
+ </a>
33
+ </li>
34
+ <li>
35
+ <a href="/following2">
36
+ <img src="/avatar2" alt="following 2" class="ui-li-icon avatar">
37
+ <p>
38
+ <span class="bord">following 2</span>
39
+ <span class="gray">@following2</span>
40
+ </p>
41
+ <!--
42
+ フォロー:8<br>
43
+ フォロワー:7
44
+ <a href="/follows/menu" data-rel="dialog" data-transition="slideup"></a>-->
45
+ <p class="fontg" style="font-size:12px;">
46
+
47
+ Description 2
48
+
49
+ <br>
50
+ <p class="font1" style="color:#e53b3b;font-weight: normal">@following2をフォローしていません</p>
51
+ </p>
52
+ </a>
53
+ </li>
54
+ <li>
55
+ <a href="/following3">
56
+ <img src="/avatar3" alt="following 3" class="ui-li-icon avatar">
57
+ <p>
58
+ <span class="bord">following 3</span>
59
+ <span class="gray">@following3</span>
60
+ </p>
61
+ <!--
62
+ フォロー:8<br>
63
+ フォロワー:7
64
+ <a href="/follows/menu" data-rel="dialog" data-transition="slideup"></a>-->
65
+ <p class="fontg" style="font-size:12px;">
66
+
67
+ Description 3
68
+
69
+ <br>
70
+ </p>
71
+ </a>
72
+ </li>
73
+ </ul>
74
+ <br>
75
+ </div><!-- /content -->
76
+ <div data-role="footer" class="footer-docs" data-theme="b" data-position="fixed" data-id="fotter1">
77
+ <div data-role="navbar" data-iconpos="top" class="footer_navber" >
78
+ <ul>
79
+ <li><a href="/" data-icon="home" rel="external"><span class="small">ホーム</span></a></li>
80
+ <li><a href="/search/all_voice" data-icon="grid" rel="external"><span class="small">Pub</span></a></li>
81
+ <li><a href="/users/redirect_user" data-icon="info"><span class="small">プロフ</span></a></li>
82
+ <li><a href="/settings/account" data-icon="gear"><span class="small">設定</span></a></li>
83
+ <li><a href="JavaScript:scrollTo(0,0)" data-icon="arrow-u"><span class="small">上へ</span></a></li>
84
+ </ul>
85
+ </div><!-- /navbar -->
86
+ </div><!-- /footer -->
87
+ </div><!-- /page -->
88
+ </body>
89
+ </html>
@@ -0,0 +1,72 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>wktk! (@wktk) on Croudia</title>
6
+ <meta content="authenticity_token" name="csrf-param">
7
+ <meta content="dummy_csrf_token" name="csrf-token">
8
+ </head>
9
+ <body>
10
+ <div data-role="page" data-url="/wktk" data-id="hedder1" id="user_profile">
11
+ <div data-role="content">
12
+ <ul data-role="listview" data-theme="c" data-dividertheme="i" style="padding-bottom:30px;">
13
+ <li data-role="list-divider" class="bar">wktk!のプロフィール</li>
14
+ </ul>
15
+ <img src="/testimages/download/9423" alt="wktk!" class="avatar_l" style="float:left;">
16
+ <span class="bord">wktk!</span>
17
+ <span class="gray"> @wktk</span>
18
+ <span class="fontg" style="word-break:break-all;">
19
+
20
+
21
+ This is a dummy description for test.
22
+
23
+ </span>
24
+ <br><br>
25
+ </ul>
26
+ <ul data-role="listview" data-inset="true" style="clear: both;">
27
+ <li>
28
+ <a href="/voices/user/wktk" rel="external">ささやき</a>
29
+ <span class="ui-li-count">3381</span>
30
+ </li>
31
+ <li>
32
+ <a href="/follows/following/wktk" rel="external">フォロー</a>
33
+ <span class="ui-li-count">46</span>
34
+ </li>
35
+ <li>
36
+ <a href="/follows/follower/wktk" rel="external">フォロワー</a>
37
+ <span class="ui-li-count">468</span>
38
+ </li>
39
+ </ul>
40
+ <ul data-role="listview" data-inset="true">
41
+ <li>
42
+ <a href="/voices/album/wktk" rel="external">アルバム</a>
43
+ <span class="ui-li-count">123</span>
44
+ </li>
45
+ </ul>
46
+ <ul data-role="listview" data-inset="true">
47
+ <li><a href="/units/addition/wktk" rel="external">リスト登録</a></li>
48
+ </ul>
49
+ <ul data-role="listview" data-inset="true">
50
+ <li><a rel="external" href="/users/google_maps/Tokyo, Japan">Tokyo, Japan</a></li>
51
+ <li><a href="http:///wktk.in" target="_blank">http://wktk.in</a></li>
52
+ </ul>
53
+ <ul data-role="listview" data-inset="true">
54
+ <li>
55
+ <a href="/spreads/spreadia/wktk" rel="external">スプレッディア</a>
56
+ <span class="ui-li-count">2525</span>
57
+ </li>
58
+ <li>
59
+ <a href="/favorites/favodia/wktk" rel="external">ファボーディア</a>
60
+ <span class="ui-li-count">4321</span>
61
+ </li>
62
+ </ul>
63
+ <ul data-role="listview" data-inset="true">
64
+ <li data-theme="a">
65
+ <a href="/settings/account" data-theme="a">設定</a>
66
+ </li>
67
+ </ul>
68
+ <br><br>
69
+ </div>
70
+ </div>
71
+ </body>
72
+ </html>
@@ -0,0 +1,75 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>wktk! (@wktk) on Croudia</title>
6
+ <meta content="authenticity_token" name="csrf-param">
7
+ <meta content="dummy_csrf_token" name="csrf-token">
8
+ </head>
9
+ <body>
10
+ <div data-role="page" data-url="/wktk" data-id="hedder1" id="user_profile">
11
+ <div data-role="content">
12
+ <ul data-role="listview" data-theme="c" data-dividertheme="i" style="padding-bottom:30px;">
13
+ <li data-role="list-divider" class="bar">wktk!のプロフィール</li>
14
+ </ul>
15
+ <img src="/testimages/download/9423" alt="wktk!" class="avatar_l" style="float:left;">
16
+ <span class="bord">wktk!</span>
17
+ <span class="gray"> @wktk</span>
18
+ <span class="fontg" style="word-break:break-all;">
19
+
20
+
21
+ This is a dummy description for test.
22
+
23
+ </span>
24
+ <p class="font1" style="color:#5b9984; clear: both;">
25
+ @wktkからフォローされています
26
+ <br>
27
+ <span class="font1" style="color:#5b9984; clear: both;">
28
+ @wktkをフォローしています
29
+ </span>
30
+ </p>
31
+ <a href="/follows/target_check_dialog/wktk" data-role="button" data-rel="dialog" data-theme="n" data-icon="arrow-r" >フォロー解除</a>
32
+ </ul>
33
+ <ul data-role="listview" data-inset="true" style="clear: both;">
34
+ <li>
35
+ <a href="/voices/user/wktk" rel="external">ささやき</a>
36
+ <span class="ui-li-count">3381</span>
37
+ </li>
38
+ <li>
39
+ <a href="/follows/following/wktk" rel="external">フォロー</a>
40
+ <span class="ui-li-count">46</span>
41
+ </li>
42
+ <li>
43
+ <a href="/follows/follower/wktk" rel="external">フォロワー</a>
44
+ <span class="ui-li-count">468</span>
45
+ </li>
46
+ </ul>
47
+ <ul data-role="listview" data-inset="true">
48
+ <li>
49
+ <a href="/voices/album/wktk" rel="external">アルバム</a>
50
+ <span class="ui-li-count">123</span>
51
+ </li>
52
+ </ul>
53
+ <ul data-role="listview" data-inset="true">
54
+ <li><a href="/units/addition/wktk" rel="external">リスト登録</a></li>
55
+ </ul>
56
+ <ul data-role="listview" data-inset="true">
57
+ <li>
58
+ <a href="/spreads/spreadia/wktk" rel="external">スプレッディア</a>
59
+ <span class="ui-li-count">2525</span>
60
+ </li>
61
+ <li>
62
+ <a href="/favorites/favodia/wktk" rel="external">ファボーディア</a>
63
+ <span class="ui-li-count">4321</span>
64
+ </li>
65
+ </ul>
66
+ <ul data-role="listview" data-inset="true">
67
+ <li data-theme="a">
68
+ <a href="/settings/account" data-theme="a">設定</a>
69
+ </li>
70
+ </ul>
71
+ <br><br>
72
+ </div>
73
+ </div>
74
+ </body>
75
+ </html>
@@ -0,0 +1,83 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>wktk! (@wktk) on Croudia</title>
6
+ <meta content="authenticity_token" name="csrf-param">
7
+ <meta content="dummy_csrf_token" name="csrf-token">
8
+ </head>
9
+ <body>
10
+ <div data-role="page" data-url="/wktk" data-id="hedder1" id="user_profile">
11
+ <div data-role="content">
12
+ <ul data-role="listview" data-theme="c" data-dividertheme="i" style="padding-bottom:30px;">
13
+ <li data-role="list-divider" class="bar">wktk!のプロフィール</li>
14
+ </ul>
15
+ <img src="/testimages/download/9423" alt="wktk!" class="avatar_l" style="float:left;">
16
+ <span class="bord">wktk!</span>
17
+ <span class="gray"> @wktk</span>
18
+ <span class="fontg" style="word-break:break-all;">
19
+
20
+
21
+ This is a dummy description for test.
22
+
23
+ </span>
24
+ <p class="font1" style="color:#e53b3b; clear: both;">
25
+ @wktkからフォローされていません
26
+ <br>
27
+ <span class="font1" style="color:#e53b3b; clear: both;">
28
+ @wktkをフォローしていません
29
+ </span>
30
+ </p>
31
+ <form accept-charset="UTF-8" action="/follows/target_follow" method="post">
32
+ <div style="margin:0;padding:0;display:inline">
33
+ <input name="utf8" type="hidden" value="&#x2713;" />
34
+ <input name="authenticity_token" type="hidden" value="dummy_csrf_token" />
35
+ </div>
36
+ <input id="follow_action" name="follow_action" type="hidden" value="enable" />
37
+ <input id="target_user_name" name="target_user_name" type="hidden" value="wktk" />
38
+ <input type="submit" data-icon="arrow-r" value="フォローする" data-theme="b">
39
+ </form>
40
+ </ul>
41
+ <ul data-role="listview" data-inset="true" style="clear: both;">
42
+ <li>
43
+ <a href="/voices/user/wktk" rel="external">ささやき</a>
44
+ <span class="ui-li-count">3381</span>
45
+ </li>
46
+ <li>
47
+ <a href="/follows/following/wktk" rel="external">フォロー</a>
48
+ <span class="ui-li-count">46</span>
49
+ </li>
50
+ <li>
51
+ <a href="/follows/follower/wktk" rel="external">フォロワー</a>
52
+ <span class="ui-li-count">468</span>
53
+ </li>
54
+ </ul>
55
+ <ul data-role="listview" data-inset="true">
56
+ <li>
57
+ <a href="/voices/album/wktk" rel="external">アルバム</a>
58
+ <span class="ui-li-count">123</span>
59
+ </li>
60
+ </ul>
61
+ <ul data-role="listview" data-inset="true">
62
+ <li><a href="/units/addition/wktk" rel="external">リスト登録</a></li>
63
+ </ul>
64
+ <ul data-role="listview" data-inset="true">
65
+ <li>
66
+ <a href="/spreads/spreadia/wktk" rel="external">スプレッディア</a>
67
+ <span class="ui-li-count">2525</span>
68
+ </li>
69
+ <li>
70
+ <a href="/favorites/favodia/wktk" rel="external">ファボーディア</a>
71
+ <span class="ui-li-count">4321</span>
72
+ </li>
73
+ </ul>
74
+ <ul data-role="listview" data-inset="true">
75
+ <li data-theme="a">
76
+ <a href="/settings/account" data-theme="a">設定</a>
77
+ </li>
78
+ </ul>
79
+ <br><br>
80
+ </div>
81
+ </div>
82
+ </body>
83
+ </html>