nokaya 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.rspec +3 -0
- data/.travis.yml +18 -0
- data/CHANGELOG.md +5 -0
- data/README.md +22 -2
- data/Rakefile +3 -7
- data/lib/nokaya/adn.rb +2 -2
- data/lib/nokaya/app.rb +13 -2
- data/lib/nokaya/deviantart.rb +2 -2
- data/lib/nokaya/favd.rb +2 -2
- data/lib/nokaya/flickr_album.rb +2 -2
- data/lib/nokaya/imageshack_user.rb +2 -2
- data/lib/nokaya/imgur_album.rb +2 -2
- data/lib/nokaya/instagram.rb +2 -2
- data/lib/nokaya/status.rb +8 -1
- data/lib/nokaya/tvshow.rb +81 -0
- data/lib/nokaya/version.rb +1 -1
- data/nokaya.gemspec +2 -0
- data/spec/mock/adn.page +109 -0
- data/spec/mock/deviantart.page +1023 -0
- data/spec/mock/favd.page +443 -0
- data/spec/mock/flickr.page +1629 -0
- data/spec/mock/imguralbum.page +1655 -0
- data/spec/mock/instagram.page +261 -0
- data/spec/mock/movie.marshal +0 -0
- data/spec/mock/musicstore.json +54 -0
- data/spec/mock/photonet.page +772 -0
- data/spec/mock/tumblr.page +1269 -0
- data/spec/mock/tumblralbum.page +1884 -0
- data/spec/nokaya_spec.rb +147 -8
- data/spec/spec_helper.rb +4 -1
- metadata +56 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 032fd55336df4db4c3d02eda35164c36980a8f86
|
4
|
+
data.tar.gz: d42998381833d58c50f7de80f37812ae856035e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f7ed80acd7a065001c088300139658894562e15b19632a01a8a81f0232165e647586847c9618b8c2a2620c953c642eeb0c30d38f76d333cca36f5ad07ec712f
|
7
|
+
data.tar.gz: b6663dd0b77110947e8cf03430af0ec11f6097d6df715de7daf63b6c676a55e545113413c481a7c59d910b31f0e9fa4ada438951181a03cec111452ecdd42b04
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[![Gem Version](https://badge.fury.io/rb/nokaya.svg)](http://badge.fury.io/rb/nokaya)
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/nokaya.svg)](http://badge.fury.io/rb/nokaya) [![Build Status](https://travis-ci.org/ericdke/nokaya.svg?branch=master)](https://travis-ci.org/ericdke/nokaya)
|
2
2
|
|
3
3
|
# Nokaya
|
4
4
|
|
@@ -24,7 +24,7 @@ Example:
|
|
24
24
|
|
25
25
|
### Movie
|
26
26
|
|
27
|
-
Downloads a movie poster
|
27
|
+
Downloads a movie poster from (part of) a movie title.
|
28
28
|
|
29
29
|
`nokaya movie title`
|
30
30
|
|
@@ -44,6 +44,26 @@ This is useful for remakes:
|
|
44
44
|
|
45
45
|
(gives the 1972 version)
|
46
46
|
|
47
|
+
### TV Show
|
48
|
+
|
49
|
+
Downloads a tvshow poster and banner from (part of) a movie title.
|
50
|
+
|
51
|
+
`nokaya tvshow title`
|
52
|
+
|
53
|
+
Example:
|
54
|
+
|
55
|
+
`nokaya tvshow battlestar galactica`
|
56
|
+
|
57
|
+
Use option `-a` to get an alternative.
|
58
|
+
|
59
|
+
`nokaya -tv battlestar galactica`
|
60
|
+
|
61
|
+
(gives the 1978 version)
|
62
|
+
|
63
|
+
`nokaya -tv -a battlestar galactica`
|
64
|
+
|
65
|
+
(gives the 2003 version)
|
66
|
+
|
47
67
|
### App store
|
48
68
|
|
49
69
|
Downloads a set of icons and screenshots for a given app name.
|
data/Rakefile
CHANGED
@@ -1,10 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
3
3
|
|
4
|
-
|
5
|
-
# Run with `rake spec`
|
6
|
-
RSpec::Core::RakeTask.new(:spec) do |task|
|
7
|
-
task.rspec_opts = ['--color', '--format', 'nested']
|
8
|
-
end
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
9
5
|
|
10
6
|
task :default => :spec
|
data/lib/nokaya/adn.rb
CHANGED
@@ -10,13 +10,13 @@ module Nokaya
|
|
10
10
|
@type = :adn
|
11
11
|
parsed = parse(args[0])
|
12
12
|
@urls = [get_basic(parsed)].compact
|
13
|
-
@author =
|
13
|
+
@author = author_name(parsed)
|
14
14
|
@filenames = name_files()
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
def
|
19
|
+
def author_name page
|
20
20
|
page.css('.p-nickname')[0].text unless page.nil?
|
21
21
|
end
|
22
22
|
|
data/lib/nokaya/app.rb
CHANGED
@@ -5,7 +5,7 @@ module Nokaya
|
|
5
5
|
|
6
6
|
package_name "Nokaya"
|
7
7
|
|
8
|
-
%w{basic status movie workers instagram favd adn tumblr tumblr_album imgur_album flickr_album photonet deviantart imageshack_user apple appstore musicstore logs}.each {|file| require_relative "#{file}"}
|
8
|
+
%w{basic status movie workers instagram favd adn tumblr tumblr_album imgur_album flickr_album photonet deviantart imageshack_user apple appstore musicstore tvshow logs}.each {|file| require_relative "#{file}"}
|
9
9
|
|
10
10
|
class_option :verbose, aliases: '-V', type: :boolean, default: true, desc: 'Enable verbose mode'
|
11
11
|
|
@@ -15,12 +15,23 @@ module Nokaya
|
|
15
15
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
16
16
|
option :alt, aliases: "-a", type: :boolean, desc: "Find an alternative response"
|
17
17
|
def movie *args
|
18
|
-
puts Status.
|
18
|
+
puts Status.wait_api if options['verbose']
|
19
19
|
image = Movie.new(args, options)
|
20
20
|
image.save
|
21
21
|
puts Status.saved(image) if options['verbose']
|
22
22
|
end
|
23
23
|
|
24
|
+
desc "tvshow TITLE", "Get the tvshow poster from TVdb (nokaya -tv title)"
|
25
|
+
map "-tv" => :tvshow
|
26
|
+
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
27
|
+
option :alt, aliases: "-a", type: :boolean, desc: "Find an alternative response"
|
28
|
+
def tvshow *args
|
29
|
+
puts Status.wait_api if options['verbose']
|
30
|
+
image = TVShow.new(args, options)
|
31
|
+
image.save
|
32
|
+
puts Status.saved(image) if options['verbose']
|
33
|
+
end
|
34
|
+
|
24
35
|
desc "appstore NAME", "Get a set of icons and screenshots for Apple apps (nokaya -as name)"
|
25
36
|
map "-as" => :appstore
|
26
37
|
option :output, aliases: "-o", type: :string, desc: "Specify an output path"
|
data/lib/nokaya/deviantart.rb
CHANGED
@@ -8,14 +8,14 @@ module Nokaya
|
|
8
8
|
@type = :deviantart
|
9
9
|
parsed = parse(args[0])
|
10
10
|
@urls = album(parsed).compact
|
11
|
-
@author =
|
11
|
+
@author = author_name()
|
12
12
|
@path = "#{@path}/deviantart-#{@author}-#{@workers.timed}"
|
13
13
|
@filenames = name_files()
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
|
-
def
|
18
|
+
def author_name
|
19
19
|
@workers.sanitize(@args[0].split('.com/')[1].chomp('/'))
|
20
20
|
end
|
21
21
|
|
data/lib/nokaya/favd.rb
CHANGED
@@ -10,13 +10,13 @@ module Nokaya
|
|
10
10
|
@type = :favd
|
11
11
|
parsed = parse(args[0])
|
12
12
|
@urls = get_favd(parsed).compact
|
13
|
-
@author =
|
13
|
+
@author = author_name(parsed)
|
14
14
|
@filenames = name_files()
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
def
|
19
|
+
def author_name page
|
20
20
|
username = page.css('.username')
|
21
21
|
username.empty? ? [] : username[0].text
|
22
22
|
end
|
data/lib/nokaya/flickr_album.rb
CHANGED
@@ -9,7 +9,7 @@ module Nokaya
|
|
9
9
|
super(args, options)
|
10
10
|
@type = :flickr
|
11
11
|
parsed = parse(args[0])
|
12
|
-
@author =
|
12
|
+
@author = author_name()
|
13
13
|
@urls = album(parsed).compact
|
14
14
|
@path = "#{@path}/flickr-#{@author}-#{title(parsed)}-#{@workers.timed}"
|
15
15
|
@filenames = name_files()
|
@@ -27,7 +27,7 @@ module Nokaya
|
|
27
27
|
refs.map {|l| l['data-defer-src']}
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def author_name
|
31
31
|
/photos\/\w+/.match(@args[0]).to_s.split('/')[1]
|
32
32
|
end
|
33
33
|
|
@@ -8,14 +8,14 @@ module Nokaya
|
|
8
8
|
@type = :imageshack
|
9
9
|
parsed = parse(args[0])
|
10
10
|
@urls = album(parsed).compact
|
11
|
-
@author =
|
11
|
+
@author = author_name()
|
12
12
|
@path = "#{@path}/imageshack-#{@author}-#{@workers.timed}"
|
13
13
|
@filenames = name_files()
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
|
-
def
|
18
|
+
def author_name
|
19
19
|
@args[0].split('/').last.chomp('/')
|
20
20
|
end
|
21
21
|
|
data/lib/nokaya/imgur_album.rb
CHANGED
@@ -9,7 +9,7 @@ module Nokaya
|
|
9
9
|
super(args, options)
|
10
10
|
@type = :imgur
|
11
11
|
parsed = parse(args[0])
|
12
|
-
@author =
|
12
|
+
@author = author_name(parsed)
|
13
13
|
@urls = album(parsed)
|
14
14
|
@path = "#{@path}/imgur-#{@author}-#{@workers.timed}"
|
15
15
|
@filenames = name_files()
|
@@ -23,7 +23,7 @@ module Nokaya
|
|
23
23
|
refs.map {|l| "http:#{l['href']}"}
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def author_name page
|
27
27
|
return [] if page.nil?
|
28
28
|
res = page.css('.description')[0].children[1].children.text
|
29
29
|
@workers.sanitize(res)
|
data/lib/nokaya/instagram.rb
CHANGED
@@ -10,13 +10,13 @@ module Nokaya
|
|
10
10
|
@type = :instagram
|
11
11
|
parsed = parse(args[0])
|
12
12
|
@urls = [get_basic(parsed)].compact
|
13
|
-
@author =
|
13
|
+
@author = author_name(parsed)
|
14
14
|
@filenames = name_files()
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
18
18
|
|
19
|
-
def
|
19
|
+
def author_name page
|
20
20
|
return [] if page.nil?
|
21
21
|
page.xpath("//meta[@property='instapp:owner_user_id']/@content")[0].value
|
22
22
|
end
|
data/lib/nokaya/status.rb
CHANGED
@@ -5,7 +5,8 @@ module Nokaya
|
|
5
5
|
"\nDownloading #{img_link}, please wait...\n\n"
|
6
6
|
end
|
7
7
|
def self.saved object
|
8
|
-
|
8
|
+
object.urls.size > 1 ? im = 'Images' : im = 'Image'
|
9
|
+
"#{im} saved in #{object.path}\n\n"
|
9
10
|
end
|
10
11
|
def self.saved_album object
|
11
12
|
"Album saved in #{object.path}\n\n"
|
@@ -13,6 +14,9 @@ module Nokaya
|
|
13
14
|
def self.no_can_do
|
14
15
|
"Canceled: unable to get the page contents.\n\n"
|
15
16
|
end
|
17
|
+
def self.no_data
|
18
|
+
"Canceled: unable to get content.\n\n"
|
19
|
+
end
|
16
20
|
def self.no_cnx
|
17
21
|
"Canceled: connexion error.\n\n"
|
18
22
|
end
|
@@ -46,6 +50,9 @@ module Nokaya
|
|
46
50
|
def self.wait
|
47
51
|
"\nScraping the page. Downloads will start automatically. Please wait...\n\n"
|
48
52
|
end
|
53
|
+
def self.wait_api
|
54
|
+
"\nGetting infos from the API. Downloads will start automatically. Please wait...\n\n"
|
55
|
+
end
|
49
56
|
def self.album_done
|
50
57
|
"\nAlbum downloaded.\n\n"
|
51
58
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Nokaya
|
3
|
+
|
4
|
+
class TVShow < Basic
|
5
|
+
|
6
|
+
require 'tvdb_party'
|
7
|
+
|
8
|
+
NOKAYA_TVDB_API_KEY = 'C9493DA27231C706'
|
9
|
+
|
10
|
+
attr_accessor :language, :poster_url, :banner_url, :plot, :title
|
11
|
+
|
12
|
+
def initialize(args, options = {})
|
13
|
+
super(args, options)
|
14
|
+
@type = :tvshow
|
15
|
+
@language = 'en'
|
16
|
+
begin
|
17
|
+
@tvdb = TvdbParty::Search.new(NOKAYA_TVDB_API_KEY)
|
18
|
+
rescue SocketError
|
19
|
+
Logs.rec.error Status.no_cnx
|
20
|
+
return nil
|
21
|
+
end
|
22
|
+
terms = args.join(' ')
|
23
|
+
show_obj = find(terms, options)
|
24
|
+
return nil if show_obj.nil?
|
25
|
+
create_details(show_obj)
|
26
|
+
@urls = [@poster_url, @banner_url]
|
27
|
+
@filenames = name_files()
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def name_files
|
33
|
+
@urls.map do |url|
|
34
|
+
"#{@type.to_s}-#{name}-#{File.basename(url)}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def find(title, options)
|
39
|
+
res = @tvdb.search(title)
|
40
|
+
unless options[:alt]
|
41
|
+
if !res[0].nil?
|
42
|
+
return @tvdb.get_series_by_id(res[0]['seriesid'])
|
43
|
+
elsif !res[1].nil?
|
44
|
+
return @tvdb.get_series_by_id(res[1]['seriesid'])
|
45
|
+
end
|
46
|
+
else
|
47
|
+
if !res[1].nil?
|
48
|
+
return @tvdb.get_series_by_id(res[1]['seriesid'])
|
49
|
+
elsif !res[2].nil?
|
50
|
+
return @tvdb.get_series_by_id(res[2]['seriesid'])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
return nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_details(show_obj)
|
57
|
+
@title = show_obj.name
|
58
|
+
@name = @workers.sanitize(@title)
|
59
|
+
@poster_url = find_poster_url(show_obj)
|
60
|
+
@banner_url = find_banner_url(show_obj)
|
61
|
+
@plot = find_plot(show_obj)
|
62
|
+
@year = show_obj.first_aired.year
|
63
|
+
@ref_url = "http://imdb.com/title/#{show_obj.imdb_id}/"
|
64
|
+
end
|
65
|
+
|
66
|
+
def find_poster_url(show_obj)
|
67
|
+
poster = show_obj.posters(@language).first
|
68
|
+
return poster.url
|
69
|
+
end
|
70
|
+
|
71
|
+
def find_banner_url(show_obj)
|
72
|
+
banner = show_obj.series_banners(@language).first
|
73
|
+
return banner.url
|
74
|
+
end
|
75
|
+
|
76
|
+
def find_plot(show_obj)
|
77
|
+
show_obj.overview
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
data/lib/nokaya/version.rb
CHANGED
data/nokaya.gemspec
CHANGED
@@ -21,10 +21,12 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "thor", "~> 0.18"
|
22
22
|
spec.add_dependency "nokogiri", '~> 1.6'
|
23
23
|
spec.add_dependency "spotlite", "~> 0.8"
|
24
|
+
spec.add_dependency "tvdb_party", "~> 0.7"
|
24
25
|
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.6"
|
26
27
|
spec.add_development_dependency "rake", "~> 10.3"
|
27
28
|
spec.add_development_dependency "rspec", "~> 3.0"
|
28
29
|
spec.add_development_dependency "guard", "~> 2.6"
|
29
30
|
spec.add_development_dependency "guard-rspec", "~> 4.3"
|
31
|
+
spec.add_development_dependency "coveralls"
|
30
32
|
end
|
data/spec/mock/adn.page
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html class="no-js breakpoint-phone">
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
+
<meta charset="utf-8">
|
6
|
+
<title>App.net | charl photo: Oops. BuzzFeedUK, meet the SEA! [files.app.net]</title>
|
7
|
+
<link rel="icon" type="image/x-icon" href="https://d2c01jv13s9if1.cloudfront.net/i/N/3/X/N3XbM8bGmJ1x0ZMcmYF4IE_mtag.ico">
|
8
|
+
<link rel="apple-touch-icon-precomposed" href="https://d2c01jv13s9if1.cloudfront.net/i/Y/l/w/YlwmDpLY0Cw0lV3OfrN68rDwYRs.png">
|
9
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
10
|
+
<meta name="HandheldFriendly" content="True">
|
11
|
+
<meta name="MobileOptimized" content="320">
|
12
|
+
<meta name="apple-mobile-web-app-capable" content="yes">
|
13
|
+
<!-- Mobile IE allows us to activate ClearType technology for smoothing fonts for easy reading -->
|
14
|
+
<meta http-equiv="cleartype" content="on">
|
15
|
+
<meta name="description" content="Oops. BuzzFeedUK, meet the SEA! [files.app.net]">
|
16
|
+
|
17
|
+
<link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet" type="text/css">
|
18
|
+
|
19
|
+
<meta property="og:title" content="App.net | charl photo: Oops. BuzzFeedUK, meet the SEA! [files.app.net]">
|
20
|
+
<meta property="og:site_name" content="App.net">
|
21
|
+
<meta property="og:type" content="website">
|
22
|
+
<meta property="og:description" content="Oops. BuzzFeedUK, meet the SEA! [files.app.net]">
|
23
|
+
<meta property="og:image" content="https://files.app.net/1/1176038/aAzhGKr0HnF6Qvx0m5y4H3DRO8t3MRUWJshlLLfv4lcJ545lYdmY5ijA3CTfvZ1I8vJN0-gNuGXlLzpDjf5diwg3WZREDWMsiCKLEM1Rzi5XBPnIjUkixFpJ5_srdyjqA_tpw-9joHD8LkYLP9GFWrWd7cVs02ijwOdBlJ25-LfG1FIz9I-oCCiWamGjtcGUX">
|
24
|
+
<meta property="og:url" content="https://alpha.app.net/charl/post/30055986/photo/1">
|
25
|
+
<link rel="alternate" type="application/json+oembed" href="https://api.app.net/oembed?url=https%3A%2F%2Falpha.app.net%2Fcharl%2Fpost%2F30055986%2Fphoto%2F1" title="App.net oEmbed">
|
26
|
+
<link rel="stylesheet" href="https://d2c01jv13s9if1.cloudfront.net/c/p/f/7/pf71uAQzx-Y-QcueKcBW-Z5baGk.css" type="text/css" class="ac-css-adn_base">
|
27
|
+
|
28
|
+
<link rel="stylesheet" href="https://d2c01jv13s9if1.cloudfront.net/c/e/5/c/e5cEUKT89AFSceKEHLWkMPrhaD0.css" type="text/css" class="ac-css-pau_bootstrap">
|
29
|
+
|
30
|
+
<meta name="referrer" content="always">
|
31
|
+
<script>
|
32
|
+
/* grunticon Stylesheet Loader | https://github.com/filamentgroup/grunticon | (c) 2012 Scott Jehl, Filament Group, Inc. | MIT license. */
|
33
|
+
window.grunticon=function(e){if(e&&3===e.length){var t=window,n=!(!t.document.createElementNS||!t.document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect||!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1")||window.opera&&-1===navigator.userAgent.indexOf("Chrome")),o=function(o){var r=t.document.createElement("link"),a=t.document.getElementsByTagName("script")[0];r.rel="stylesheet",r.href=e[o&&n?0:o?1:2],a.parentNode.insertBefore(r,a)},r=new t.Image;r.onerror=function(){o(!1)},r.onload=function(){o(1===r.width&&1===r.height)},r.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="}};
|
34
|
+
grunticon(["//d39zheejy3ckol.cloudfront.net/emoji/423105160813/icons/icons.data.svg.css", "//d39zheejy3ckol.cloudfront.net/emoji/423105160813/icons/icons.data.png.css", "//d39zheejy3ckol.cloudfront.net/emoji/423105160813/icons/icons.fallback.css"]);
|
35
|
+
</script>
|
36
|
+
<noscript><link href="icons.fallback.css" rel="stylesheet"></noscript>
|
37
|
+
<script type="text/javascript" src="https://d2c01jv13s9if1.cloudfront.net/j/9/E/7/9E7EfSjCpLES7HvyBhUGmS03j04_.js"></script>
|
38
|
+
</head>
|
39
|
+
|
40
|
+
<body class="">
|
41
|
+
<div id="pjax-container">
|
42
|
+
<meta name="adn-page-context" id="adn-page-context" data-adn-page-context='{"cookie_value":"1|1411251905|I7kLA4AjRlGzXNRg-4atjdksrwuaGXOoNbyea8lXE-Q","build_info":"lanai-master-tapp-build-12121-7bf82d6","subscribe_url":"//account.app.net/upgrade/","is_authenticated":false,"timestamp":1411251905000,"search_log_url":"https://app.net/log-search/","mixpanel_token":"585aa02b4948ab375523ca0e4b6eb57d","page_load_hooks":["utils.handle_resize","autocomplete.init","init_pau","init_post_delete","init_mute_user","init_post_report","init_star_post","init_repost","pau.init_help","pau.init_fixed_nav","photo.init"],"environment":"prod","autocomplete_url":"https://directory.app.net/universal-autocomplete/","upgrade_storage_url":"//account.app.net/settings/upgrade/storage/","api_options":{"avt":"8N6jzzQWTYXqjp3Q","api_base_url":"/omo-api-proxy/"},"is_pjax":null,"omo_is_authenticated":false,"autochrome_img_url_base":"//d2c01jv13s9if1.cloudfront.net","canvas_mode":"pau"}'>
|
43
|
+
|
44
|
+
<div class="photo-view">
|
45
|
+
<div class="top">
|
46
|
+
<div class="branding-container">
|
47
|
+
<a class="branding pull-left" href="//app.net/"></a>
|
48
|
+
<a class="see-conversation pull-right m-yui3-u-none" href="/charl/post/30055986">See conversation →</a>
|
49
|
+
<a class="see-conversation pull-right m-yui3-u t-yui3-u-none yui3-u-none" href="/charl/post/30055986">Conversation</a>
|
50
|
+
<a class="signup pull-right" href="//app.net/">Sign Up
|
51
|
+
</a>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
<div class="middle">
|
55
|
+
<div class="image-container">
|
56
|
+
<div class="loader"><i class="icon-refresh icon-2x icon-spin"></i></div>
|
57
|
+
<img src="https://files.app.net/1/1176038/aAzhGKr0HnF6Qvx0m5y4H3DRO8t3MRUWJshlLLfv4lcJ545lYdmY5ijA3CTfvZ1I8vJN0-gNuGXlLzpDjf5diwg3WZREDWMsiCKLEM1Rzi5XBPnIjUkixFpJ5_srdyjqA_tpw-9joHD8LkYLP9GFWrWd7cVs02ijwOdBlJ25-LfG1FIz9I-oCCiWamGjtcGUX" data-full-width="576" data-full-height="1024">
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
<div class="bottom" data-post-container>
|
61
|
+
<div name="30055986" class="subpixel h-entry post-container" data-post-remove-from-page="1" data-post-author-id="46660" data-post-author-username="charl" data-post-id="30055986"><div class="content">
|
62
|
+
<div class="media"><a href="/charl" class="avatar" style="background-image:url(https://d2rfichhc2fb9n.cloudfront.net/image/5/mfUOQmuiuTOxkog_cJwphpbN_SN7InMiOiJzMyIsImIiOiJhZG4tdXNlci1hc3NldHMiLCJrIjoiYXNzZXRzL3VzZXIvMGIvNDkvOTAvMGI0OTkwMDAwMDAwMDAwMC5qcGciLCJvIjoiIn0?h=114&w=114);"></a></div>
|
63
|
+
<div class="post-header">
|
64
|
+
<span class="username p-author h-card"><a href="/charl" class="u-url p-nickname">charl</a></span><ul class="unstyled ul-horizontal yui3-u fixed-right ta-right"></ul>
|
65
|
+
</div>
|
66
|
+
<div class="body"><div class="post-text"><span class="post-content e-content"><span itemscope="https://join.app.net/schemas/Post">Oops. <a href="https://files.app.net/24gxz--FY" target="_blank" rel="nofollow">BuzzFeedUK, meet the SEA!</a> [files.app.net]</span></span></div></div>
|
67
|
+
<div class="post-footer">
|
68
|
+
<ul class="unstyled ul-horizontal footer-top"></ul>
|
69
|
+
<ul class="unstyled ul-horizontal footer-bottom">
|
70
|
+
<li><a href="/charl/post/30055986" title="12:04 PM - 08 May 2014" class="u-url timestamp"><time datetime="12:04 PM - 08 May 2014" class="dt-published"><i class="yui3-u icon-time"></i> 08 May</time></a></li>
|
71
|
+
<li class="yui3-u show-on-hover post-source"><a href="http://wedge.natestedman.com" target="_blank" rel="nofollow"><i class="icon-share"></i> via Wedge</a></li>
|
72
|
+
</ul>
|
73
|
+
</div>
|
74
|
+
</div></div>
|
75
|
+
</div>
|
76
|
+
</div>
|
77
|
+
</div>
|
78
|
+
|
79
|
+
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript" src="https://d2c01jv13s9if1.cloudfront.net/j/i/U/s/iUsdWaYGHrCGQAPkYRQE98NrHqY_.js"></script>
|
80
|
+
|
81
|
+
<script type="text/javascript" src="//d39zheejy3ckol.cloudfront.net/emoji/423105160813/emoji_replace.min.js"></script>
|
82
|
+
|
83
|
+
<script type="text/javascript">
|
84
|
+
var _gaq = _gaq || [];
|
85
|
+
_gaq.push(['_setAccount', 'UA-22213034-7']);
|
86
|
+
_gaq.push(['_trackPageview']);
|
87
|
+
(function() {
|
88
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
89
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
90
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
91
|
+
})();
|
92
|
+
</script>
|
93
|
+
<script type="text/javascript">
|
94
|
+
(function(d,c){var a,b,g,e;a=d.createElement("script");a.type="text/javascript";
|
95
|
+
a.async=!0;a.src=("https:"===d.location.protocol?"https:":"http:")+
|
96
|
+
'//api.mixpanel.com/site_media/js/api/mixpanel.2.js';b=d.getElementsByTagName("script")[0];
|
97
|
+
b.parentNode.insertBefore(a,b);c._i=[];c.init=function(a,d,f){var b=c;
|
98
|
+
"undefined"!==typeof f?b=c[f]=[]:f="mixpanel";g=['disable','track','track_pageview',
|
99
|
+
'track_links','track_forms','register','register_once','unregister','identify',
|
100
|
+
'name_tag','set_config'];
|
101
|
+
for(e=0;e<g.length;e++)(function(a){b[a]=function(){b.push([a].concat(
|
102
|
+
Array.prototype.slice.call(arguments,0)))}})(g[e]);c._i.push([a,d,f])};window.mixpanel=c}
|
103
|
+
)(document,[]);
|
104
|
+
mixpanel.init(page_context.mixpanel_token);
|
105
|
+
</script>
|
106
|
+
|
107
|
+
|
108
|
+
</body>
|
109
|
+
</html>
|