wikipedia-client 1.8.0 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +1 -1
- data/.travis.yml +4 -1
- data/Gemfile.lock +69 -53
- data/README.textile +7 -3
- data/lib/wikipedia/client.rb +4 -2
- data/lib/wikipedia/page.rb +8 -0
- data/lib/wikipedia/url.rb +1 -1
- data/lib/wikipedia/version.rb +1 -1
- data/spec/fixtures/Innopolis.json +1 -0
- data/spec/lib/client_spec.rb +56 -17
- data/wikipedia-client.gemspec +4 -4
- metadata +32 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 07e7dbcd9e8fd92afb079f75a87a928740dbb2427ec6a26e115cb67473f6dba9
|
4
|
+
data.tar.gz: 64a2a3cd7bf9d74b1496af48d8a2aa73366ccf4339c79d3297813d6fdb282d45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c98ab9206724951d38d97b56bc2ef9890179971c6abcf816ae7f1a89264681b3b73d76e4d2ff1bb9ce186eb9392a6a8220e63fe6a90bbb951e803020b68a064
|
7
|
+
data.tar.gz: 4f7dc758853e41b3ea56542fa66ec4e5fc4ad013a9a75f91a6292ca790e7bda64abc020537e599245433b3f57a91c28b98783515695e771e509337935f5a9320
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,72 +1,85 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
wikipedia-client (1.
|
4
|
+
wikipedia-client (1.12.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
addressable (2.
|
9
|
+
addressable (2.4.0)
|
10
10
|
ast (2.3.0)
|
11
|
-
builder (3.2.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
11
|
+
builder (3.2.4)
|
12
|
+
coderay (1.1.3)
|
13
|
+
descendants_tracker (0.0.4)
|
14
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
15
|
+
diff-lcs (1.4.4)
|
16
|
+
faraday (0.9.2)
|
17
|
+
multipart-post (>= 1.2, < 3)
|
18
|
+
git (1.8.1)
|
19
|
+
rchardet (~> 1.8)
|
20
|
+
github_api (0.16.0)
|
21
|
+
addressable (~> 2.4.0)
|
22
|
+
descendants_tracker (~> 0.0.4)
|
23
|
+
faraday (~> 0.8, < 0.10)
|
24
|
+
hashie (>= 3.4)
|
25
|
+
mime-types (>= 1.16, < 3.0)
|
26
|
+
oauth2 (~> 1.0)
|
27
|
+
hashie (4.1.0)
|
28
|
+
highline (2.0.3)
|
29
|
+
jeweler (2.3.9)
|
27
30
|
builder
|
28
|
-
bundler
|
31
|
+
bundler
|
29
32
|
git (>= 1.2.5)
|
30
|
-
github_api (
|
33
|
+
github_api (~> 0.16.0)
|
31
34
|
highline (>= 1.6.15)
|
32
|
-
nokogiri (
|
35
|
+
nokogiri (>= 1.5.10)
|
36
|
+
psych
|
33
37
|
rake
|
34
38
|
rdoc
|
35
|
-
|
36
|
-
jwt (
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
39
|
+
semver2
|
40
|
+
jwt (2.2.2)
|
41
|
+
method_source (1.0.0)
|
42
|
+
mime-types (2.99.3)
|
43
|
+
mini_portile2 (2.5.0)
|
44
|
+
multi_json (1.15.0)
|
45
|
+
multi_xml (0.6.0)
|
46
|
+
multipart-post (2.1.1)
|
47
|
+
nokogiri (1.11.2)
|
48
|
+
mini_portile2 (~> 2.5.0)
|
49
|
+
racc (~> 1.4)
|
50
|
+
oauth2 (1.4.7)
|
51
|
+
faraday (>= 0.8, < 2.0)
|
52
|
+
jwt (>= 1.0, < 3.0)
|
53
|
+
multi_json (~> 1.3)
|
47
54
|
multi_xml (~> 0.5)
|
48
|
-
rack (
|
55
|
+
rack (>= 1.2, < 3)
|
49
56
|
parser (2.4.0.0)
|
50
57
|
ast (~> 2.2)
|
51
58
|
powerpack (0.1.1)
|
52
|
-
|
59
|
+
pry (0.14.0)
|
60
|
+
coderay (~> 1.1)
|
61
|
+
method_source (~> 1.0)
|
62
|
+
psych (3.3.1)
|
63
|
+
racc (1.5.2)
|
64
|
+
rack (2.2.3)
|
53
65
|
rainbow (2.2.2)
|
54
66
|
rake
|
55
|
-
rake (
|
56
|
-
|
57
|
-
|
58
|
-
rspec (3.
|
59
|
-
rspec-core (~> 3.
|
60
|
-
rspec-expectations (~> 3.
|
61
|
-
rspec-mocks (~> 3.
|
62
|
-
rspec-core (3.
|
63
|
-
rspec-support (~> 3.
|
64
|
-
rspec-expectations (3.
|
67
|
+
rake (13.0.3)
|
68
|
+
rchardet (1.8.0)
|
69
|
+
rdoc (6.3.0)
|
70
|
+
rspec (3.10.0)
|
71
|
+
rspec-core (~> 3.10.0)
|
72
|
+
rspec-expectations (~> 3.10.0)
|
73
|
+
rspec-mocks (~> 3.10.0)
|
74
|
+
rspec-core (3.10.1)
|
75
|
+
rspec-support (~> 3.10.0)
|
76
|
+
rspec-expectations (3.10.1)
|
65
77
|
diff-lcs (>= 1.2.0, < 2.0)
|
66
|
-
rspec-support (~> 3.
|
67
|
-
rspec-mocks (3.
|
68
|
-
|
69
|
-
|
78
|
+
rspec-support (~> 3.10.0)
|
79
|
+
rspec-mocks (3.10.2)
|
80
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
81
|
+
rspec-support (~> 3.10.0)
|
82
|
+
rspec-support (3.10.2)
|
70
83
|
rubocop (0.48.1)
|
71
84
|
parser (>= 2.3.3.1, < 3.0)
|
72
85
|
powerpack (~> 0.1)
|
@@ -74,20 +87,23 @@ GEM
|
|
74
87
|
ruby-progressbar (~> 1.7)
|
75
88
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
76
89
|
ruby-progressbar (1.8.1)
|
90
|
+
semver2 (3.4.2)
|
77
91
|
thoughtbot-shoulda (2.11.1)
|
92
|
+
thread_safe (0.3.6)
|
78
93
|
unicode-display_width (1.2.1)
|
79
94
|
|
80
95
|
PLATFORMS
|
81
96
|
ruby
|
82
97
|
|
83
98
|
DEPENDENCIES
|
84
|
-
jeweler (~>
|
85
|
-
|
86
|
-
|
99
|
+
jeweler (~> 2.0)
|
100
|
+
pry (~> 0.14)
|
101
|
+
rake (~> 13.0)
|
102
|
+
rdoc (~> 6.0)
|
87
103
|
rspec (~> 3.0)
|
88
104
|
rubocop (~> 0.48)
|
89
105
|
thoughtbot-shoulda (~> 2.11, >= 2.11)
|
90
106
|
wikipedia-client!
|
91
107
|
|
92
108
|
BUNDLED WITH
|
93
|
-
|
109
|
+
2.0.2
|
data/README.textile
CHANGED
@@ -86,7 +86,11 @@ page.coordinates
|
|
86
86
|
|
87
87
|
page.templates
|
88
88
|
|
89
|
-
=> [..., "Template:About", ...]
|
89
|
+
=> [..., "Template:About", ...]
|
90
|
+
|
91
|
+
page.langlinks
|
92
|
+
|
93
|
+
=> {..., "de"=>"Getting Things Done", "eo"=>"Igi aferojn finitaj", "zh"=>"尽管去做", ...}</code></pre>
|
90
94
|
|
91
95
|
h2. Configuration
|
92
96
|
|
@@ -101,8 +105,7 @@ h2. Advanced
|
|
101
105
|
|
102
106
|
See the API spec at "http://en.wikipedia.org/w/api.php":http://en.wikipedia.org/w/api.php
|
103
107
|
|
104
|
-
If you need data that is not already present, you can override
|
105
|
-
parameters.
|
108
|
+
If you need data that is not already present, you can override parameters.
|
106
109
|
|
107
110
|
For example, to retrieve only the page info:
|
108
111
|
|
@@ -162,3 +165,4 @@ Pietro F. Menna <pietromenna@yahoo.com>
|
|
162
165
|
Sophie Rapoport <sfrapoport@gmail.com>
|
163
166
|
tsukasaoishi <tsukasa.oishi@gmail.com>
|
164
167
|
V <thevalentino@gmail.com>
|
168
|
+
Ilgiz Mustafin <ilgimustafin@gmail.com>
|
data/lib/wikipedia/client.rb
CHANGED
@@ -34,10 +34,12 @@ module Wikipedia
|
|
34
34
|
def request_page( title, options = {} )
|
35
35
|
request( {
|
36
36
|
action: 'query',
|
37
|
-
prop: %w[
|
37
|
+
prop: %w[info revisions links extlinks images categories coordinates templates extracts pageimages langlinks],
|
38
38
|
rvprop: 'content',
|
39
39
|
inprop: 'url',
|
40
|
+
pithumbsize: 200,
|
40
41
|
explaintext: '',
|
42
|
+
lllimit: 500,
|
41
43
|
titles: title
|
42
44
|
}.merge( options ) )
|
43
45
|
end
|
@@ -104,7 +106,7 @@ module Wikipedia
|
|
104
106
|
def encode( val )
|
105
107
|
case val
|
106
108
|
when String
|
107
|
-
URI.encode( val
|
109
|
+
URI.encode( val, /#{URI::UNSAFE}|[\+&]/ )
|
108
110
|
else
|
109
111
|
val
|
110
112
|
end
|
data/lib/wikipedia/page.rb
CHANGED
@@ -60,6 +60,10 @@ module Wikipedia
|
|
60
60
|
page['extlinks'].map { |c| c['*'] } if page['extlinks']
|
61
61
|
end
|
62
62
|
|
63
|
+
def langlinks
|
64
|
+
Hash[page['langlinks'].collect { |c| [c['lang'], c['*']] }] if page['langlinks']
|
65
|
+
end
|
66
|
+
|
63
67
|
def images
|
64
68
|
page['images'].map { |c| c['title'] } if page['images']
|
65
69
|
end
|
@@ -93,6 +97,10 @@ module Wikipedia
|
|
93
97
|
page['thumbnail']['source'].sub(/\/thumb/, '').sub(/\/[^\/]*$/, '') if page['thumbnail']
|
94
98
|
end
|
95
99
|
|
100
|
+
def main_image_thumburl
|
101
|
+
page['thumbnail']['source'] if page['thumbnail']
|
102
|
+
end
|
103
|
+
|
96
104
|
def coordinates
|
97
105
|
page['coordinates'].first.values if page['coordinates']
|
98
106
|
end
|
data/lib/wikipedia/url.rb
CHANGED
data/lib/wikipedia/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
{"continue":{"plcontinue":"46867293|0|Alkeyevsky_District","tlcontinue":"46867293|10|Infobox_Russian_town","continue":"||info|revisions|extlinks|images|categories|coordinates|extracts|pageimages|langlinks"},"warnings":{"extracts":{"*":"\"exlimit\" was too large for a whole article extracts request, lowered to 1."}},"query":{"pages":{"46867293":{"pageid":46867293,"ns":0,"title":"Innopolis","contentmodel":"wikitext","pagelanguage":"en","pagelanguagehtmlcode":"en","pagelanguagedir":"ltr","touched":"2018-03-17T20:09:26Z","lastrevid":826758180,"length":7900,"fullurl":"https://en.wikipedia.org/wiki/Innopolis","editurl":"https://en.wikipedia.org/w/index.php?title=Innopolis&action=edit","canonicalurl":"https://en.wikipedia.org/wiki/Innopolis","revisions":[{"contentformat":"text/x-wiki","contentmodel":"wikitext","*":"{{Distinguish|Innopoli}}\n\n{{Infobox Russian town\n|en_name=Innopolis\n|ru_name=\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441\n|loc_name1=\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441\n|loc_lang1=Tatar\n|image_skyline=\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441. \u0422\u0435\u0445\u043d\u043e\u043f\u0430\u0440\u043a \u0438\u043c. \u0410.\u0421. \u041f\u043e\u043f\u043e\u0432\u0430.JPG\n|image_caption=A.S. Popov [[science park|technology park]] in Innopolis\n|coordinates = {{coord|55|44|N|48|44|E|display=inline,title}}\n|map_label_position=right\n|image_coa=\n|coa_caption=\n|image_flag=\n|flag_caption=\n|anthem=\n|anthem_ref=\n|holiday=\n|holiday_ref=\n|federal_subject=[[Republic of Tatarstan]]\n|federal_subject_ref=<ref name=\"RTatarstan_admlist\" />\n|adm_data_as_of=March 2015\n|adm_district_jur=[[Verkhneuslonsky District]]\n|adm_district_jur_ref=<ref name=\"RTatarstan_admlist\" />\n|inhabloc_cat=Town\n|inhabloc_cat_ref=<ref name=\"RTatarstan_admlist\" />\n|inhabloc_type=\n|inhabloc_type_ref=\n|mun_data_as_of=December 2014\n|mun_district_jur=Verkhneuslonsky Municipal District\n|mun_district_jur_ref=<ref name=\"RTatarstanVerkhneuslonskyD_mun\" />\n|urban_settlement_jur=Innopolis Urban Settlement\n|urban_settlement_jur_ref=<ref name=\"RTatarstanVerkhneuslonskyD_mun\" />\n|mun_admctr_of=Innopolis Urban Settlement\n|mun_admctr_of_ref=<ref name=\"RTatarstanVerkhneuslonskyD_mun\" />\n|leader_title=\n|leader_title_ref=\n|leader_name=\n|leader_name_ref=\n|representative_body=\n|representative_body_ref=\n|area_of_what=\n|area_as_of=\n|area_km2=\n|area_km2_ref=\n<!--\n|pop_2010census=did not exist in 2010\n|pop_2010census_ref=-->\n|pop_density=\n|pop_density_as_of=\n|pop_density_ref=\n|pop_latest=96\n|pop_latest_date=2016\n|pop_latest_ref=<ref name=\"2016Est\" />\n|established_date=December 24, 2012\n|established_title=\n|established_date_ref=<ref name=\"Established\" />\n|current_cat_date=December 16, 2014\n|current_cat_date_ref=<ref name=\"TownStatus\" />\n|postal_codes=420500\n|dialing_codes=\n|dialing_codes_ref=\n|website=http://www.innopolis.ru\n|website_ref=\n|date=June 2015\n}}\n'''Innopolis''' ({{lang-ru|\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441}}; {{lang-tt|\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441|Innopolis}}) is a [[types of inhabited localities in Russia|town]] in [[Verkhneuslonsky District]] of the [[Republic of Tatarstan]], [[Russia]], a [[satellite town|satellite]] of [[Kazan]], the [[capital city|capital]] of the republic.\n\nThis is the smallest town in Russia<ref>http://www.photokzn.ru/news/0/8880-innopolis</ref> with 96 inhabitants according to the 2016 estimate.<ref name=\"2016Est\">Republic of Tatarstan Territorial Branch of the [[Russian Federal State Statistics Service|Federal State Statistics Service]]. [http://tatstat.gks.ru/wps/wcm/connect/rosstat_ts/tatstat/resources/4f3274804c0d84f9ab87abc621b350d8/%D0%9C%D0%9E%D1%87%D0%B8%D1%81%D0%BB2016.pdf \u0427\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e 2016 \u0433.] {{ru icon}}</ref>\n\n==History==\n[[File:Medvedev, Nikiforov, Minnihanov in Kazan Innopolis (groundbreaking ceremony).jpeg|thumb|left|Inauguration of the Innopolis' foundation, June 2012. Left to right: [[Rustam Minnikhanov]], the [[President of the Republic of Tatarstan]]; [[Dmitry Medvedev]], the [[Prime Minister of Russia]]; [[Nikolay Nikiforov]], [[Ministry of Communications and Mass Media (Russia)|Minister of Communications and Mass Media]]]]\n\n[[File:Residental area.jpg|thumb|left|Residential area]]\n[[File:Innopolis University.jpg|thumb|left|The main building of the University of Innopolis]]\n\nInnopolis was established on December 24, 2012<ref name=\"Established\">Resolution #2622-IV-GS</ref> as a technology park. Town status was granted to it on December 16, 2014.<ref name=\"TownStatus\">Law #115-ZRT</ref>\n\n==Administrative and municipal status==\nWithin the [[subdivisions of Russia#Administrative divisions|framework of administrative divisions]], the [[types of inhabited localities in Russia|town]] of Innopolis is subordinated to [[Verkhneuslonsky District]].<ref name=\"RTatarstan_admlist\">Order #01-02/9</ref> As a [[subdivisions of Russia#Municipal divisions|municipal division]], Innopolis is incorporated within Verkhneuslonsky Municipal District as '''Innopolis Urban Settlement'''.<ref name=\"RTatarstanVerkhneuslonskyD_mun\">Law #19-ZRT</ref>\n\n\n==Urban Infrastructure==\nThe basis of the housing stock of Innopolis is 4 blocks of multi-storey apartment houses - 16 houses for 840 apartments - built by the State Housing Fund under the President of the Republic of Tatarstan and intended for leasing to residents of Innopolis and students.\n\nAs of the end of 2016, there was a kindergarten, a school, an IT lyceum, a sports and medical center, post offices, client offices of AK Bars and Sberbank, a beauty salon, a coffee shop and a supermarket in Innopolis.\n\n==References==\n===Notes===\n{{Reflist}}\n\n===Sources===\n*{{RussiaAdmMunRef|ta|adm|list}}\n*{{RussiaAdmMunRef|ta|mun|list|verkhneuslonsky}}\n*{{Cite Russian law\n|ru_entity=\u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0421\u043e\u0432\u0435\u0442 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\n|ru_type=\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\n|ru_number=2622-IV-\u0413\u0421\n|ru_date=24 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2012 \u0433.\n|ru_title=\u041e\u0431 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430\u0441\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u2014 \u043f\u043e\u0441\u0451\u043b\u043a\u0430 \u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441 \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\n|ru_effective_date=\n|ru_published_in=\"\u0412\u0435\u0434\u043e\u043c\u043e\u0441\u0442\u0438 \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0421\u043e\u0432\u0435\u0442\u0430 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\u0430\", \u211612 (III \u0447\u0430\u0441\u0442\u044c), \u0441\u0442. 1926\n|ru_published_date=2012\n|ru_url=\n|en_entity=[[State Council of the Republic of Tatarstan]]\n|en_type=Resolution\n|en_number=2622-IV-GS\n|en_date=December 24, 2012\n|en_title=On Establishing an Inhabited Locality\u2014the Settlement of Innopolis\u2014on the Territory of Verkhneuslonsky District of the Republic of Tatarstan\n|en_effective_date=\n|en_url=\n}}\n*{{Cite Russian law\n|ru_entity=\u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0421\u043e\u0432\u0435\u0442 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\n|ru_type=\u0417\u0430\u043a\u043e\u043d\n|ru_number=115-\u0417\u0420\u0422\n|ru_date=13 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2014 \u0433.\n|ru_title=\u041e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u0451\u043b\u043a\u0430 \u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441 \u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0412\u0432\u0435\u0434\u0435\u043d\u0441\u043a\u043e-\u0421\u043b\u043e\u0431\u043e\u0434\u0441\u043a\u043e\u0433\u043e \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0417\u0430\u043a\u043e\u043d \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d \"\u041e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u0438\u0439 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0439\u043e\u043d\" \u0438 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0435\"\n|ru_effective_date=\u0441\u043e \u0434\u043d\u044f \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0438\u044f\n|ru_published_in=\"\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\", \u2116183\n|ru_published_date=16 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2014 \u0433\n|ru_url=\n|en_entity=[[State Council of the Republic of Tatarstan]]\n|en_type=Law\n|en_number=115-ZRT\n|en_date=December 13, 2014\n|en_title=On the Transformation of the Settlement of Innopolis in Verkhneuslonsky District, on Changing the Borders of Several Municipal Formations, and on Transforming Vvedensko-Slobodskoye Rural Settlement in Verkhneuslonsky Municipal District, as well as Amending the Law of the Republic of Tatarstan \"On Establishing the Borders of the Territories and the Status of the Municipal Formation of \"Verkhneuslonsky Municipal District\" and of the Municipal Formations It Comprises\"\n|en_effective_date=the day of the official publication\n|en_url=\n}}\n\n{{Republic of Tatarstan}}\n{{Use mdy dates|date=June 2015}}\n\n[[Category:Cities and towns in Tatarstan]]\n[[Category:Populated places established in 2012]]\n[[Category:Naukograds]]\n[[Category:Information technology places]]"}],"links":[{"ns":0,"title":"Administrative centre"},{"ns":0,"title":"Administrative divisions of the Republic of Tatarstan"},{"ns":0,"title":"Agryz"},{"ns":0,"title":"Agryzsky District"},{"ns":0,"title":"Aksubayevo"},{"ns":0,"title":"Aksubayevsky District"},{"ns":0,"title":"Aktanyshsky District"},{"ns":0,"title":"Aktyubinsky, Republic of Tatarstan"},{"ns":0,"title":"Alexeyevskoye, Republic of Tatarstan"},{"ns":0,"title":"Alexeyevsky District, Republic of Tatarstan"}],"extlinks":[{"*":"//tools.wmflabs.org/geohack/geohack.php?pagename=Innopolis¶ms=55_44_N_48_44_E_region:RU-TA_type:city"},{"*":"http://pravo.tatarstan.ru"},{"*":"http://tatstat.gks.ru/wps/wcm/connect/rosstat_ts/tatstat/resources/4f3274804c0d84f9ab87abc621b350d8/%D0%9C%D0%9E%D1%87%D0%B8%D1%81%D0%BB2016.pdf"},{"*":"http://translate.google.com/translate?hl=en&sl=ru&tl=en&u=http://www.consultant.ru/cons/cgi/online.cgi?req=doc&base=LAW&n=201180"},{"*":"http://vinfo.russianpost.ru/servlet/department"},{"*":"http://www.consultant.ru/cons/cgi/online.cgi?req=doc&base=LAW&n=201180"},{"*":"http://www.innopolis.ru"},{"*":"http://www.photokzn.ru/news/0/8880-innopolis"}],"images":[{"ns":6,"title":"File:Coat of Arms of Tatarstan.svg"},{"ns":6,"title":"File:Flag of Tatarstan.svg"},{"ns":6,"title":"File:Innopolis University.jpg"},{"ns":6,"title":"File:Map of Russia - Republic of Tatarstan (2008-03).svg"},{"ns":6,"title":"File:Medvedev, Nikiforov, Minnihanov in Kazan Innopolis (groundbreaking ceremony).jpeg"},{"ns":6,"title":"File:Outline Map of Tatarstan.svg"},{"ns":6,"title":"File:Red pog.svg"},{"ns":6,"title":"File:Residental area.jpg"},{"ns":6,"title":"File:\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441. \u0422\u0435\u0445\u043d\u043e\u043f\u0430\u0440\u043a \u0438\u043c. \u0410.\u0421. \u041f\u043e\u043f\u043e\u0432\u0430.JPG"}],"categories":[{"ns":14,"title":"Category:Articles containing Russian-language text"},{"ns":14,"title":"Category:Articles containing Tatar-language text"},{"ns":14,"title":"Category:Articles with Russian-language external links"},{"ns":14,"title":"Category:Cities and towns in Tatarstan"},{"ns":14,"title":"Category:Coordinates on Wikidata"},{"ns":14,"title":"Category:Information technology places"},{"ns":14,"title":"Category:Naukograds"},{"ns":14,"title":"Category:Populated places established in 2012"},{"ns":14,"title":"Category:Use mdy dates from June 2015"}],"coordinates":[{"lat":55.73333333,"lon":48.73333333,"primary":"","globe":"earth"}],"templates":[{"ns":10,"title":"Template:Category handler"},{"ns":10,"title":"Template:Cite Russian law"},{"ns":10,"title":"Template:Coord"},{"ns":10,"title":"Template:DMCA"},{"ns":10,"title":"Template:Dated maintenance category"},{"ns":10,"title":"Template:Distinguish"},{"ns":10,"title":"Template:FULLROOTPAGENAME"},{"ns":10,"title":"Template:ISO 639 name ru"},{"ns":10,"title":"Template:Infobox"},{"ns":10,"title":"Template:Infobox Russian inhabited locality"}],"extract":"Innopolis (Russian: \u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441; Tatar: Cyrillic \u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441, Latin Innopolis) is a town in Verkhneuslonsky District of the Republic of Tatarstan, Russia, a satellite of Kazan, the capital of the republic.\nThis is the smallest town in Russia with 96 inhabitants according to the 2016 estimate.\n\n\n== History ==\n\nInnopolis was established on December 24, 2012 as a technology park. Town status was granted to it on December 16, 2014.\n\n\n== Administrative and municipal status ==\nWithin the framework of administrative divisions, the town of Innopolis is subordinated to Verkhneuslonsky District. As a municipal division, Innopolis is incorporated within Verkhneuslonsky Municipal District as Innopolis Urban Settlement.\n\n\n== Urban Infrastructure ==\nThe basis of the housing stock of Innopolis is 4 blocks of multi-storey apartment houses - 16 houses for 840 apartments - built by the State Housing Fund under the President of the Republic of Tatarstan and intended for leasing to residents of Innopolis and students.\nAs of the end of 2016, there was a kindergarten, a school, an IT lyceum, a sports and medical center, post offices, client offices of AK Bars and Sberbank, a beauty salon, a coffee shop and a supermarket in Innopolis.\n\n\n== References ==\n\n\n=== Notes ===\n\n\n=== Sources ===\n\u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043e \u044e\u0441\u0442\u0438\u0446\u0438\u0438 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d. \u041f\u0440\u0438\u043a\u0430\u0437 \u211601-02/9 \u043e\u0442 4 \u0444\u0435\u0432\u0440\u0430\u043b\u044f 2014 \u0433. \u00ab\u041e\u0431 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0438 \u0440\u0435\u0435\u0441\u0442\u0440\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438 \u043d\u0430\u0441\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0432 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0435 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\u00bb, \u0432 \u0440\u0435\u0434. \u041f\u0440\u0438\u043a\u0430\u0437\u0430 \u211601-02/160 \u043e\u0442 11 \u043c\u0430\u0440\u0442\u0430 2015 \u0433. \u00ab\u041e \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u041f\u0440\u0438\u043a\u0430\u0437 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u044e\u0441\u0442\u0438\u0446\u0438\u0438 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d \u043e\u0442 04.02.2014 \u211601-02/9 \"\u041e\u0431 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0438 \u0440\u0435\u0435\u0441\u0442\u0440\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438 \u043d\u0430\u0441\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0432 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0435 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\"\u00bb. \u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d: \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442 \u043f\u0440\u0430\u0432\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u041c\u0438\u043d\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u0430 \u044e\u0441\u0442\u0438\u0446\u0438\u0438 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d (http://pravo.tatarstan.ru), 27 \u0444\u0435\u0432\u0440\u0430\u043b\u044f 2014 \u0433. (Ministry of Justice of the Republic of Tatarstan. Order #01-02/9 of February 4, 2014 On the Adoption of the Registry of the Administrative-Territorial Units and Inhabited Localities in the Republic of Tatarstan, as amended by the Order #01-02/160 of March 11, 2015 On Amending the Order of the Ministry of Justice of the Republic of Tatarstan #01-02/9 of February 4, 2014 \"On the Adoption of the Registry of the Administrative-Territorial Units and Inhabited Localities in the Republic of Tatarstan\". ).\n\u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0421\u043e\u0432\u0435\u0442 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d. \u0417\u0430\u043a\u043e\u043d \u211619-\u0417\u0420\u0422 \u043e\u0442 31 \u044f\u043d\u0432\u0430\u0440\u044f 2005 \u0433. \u00ab\u041e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u0438\u0439 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0439\u043e\u043d\" \u0438 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0435\u00bb, \u0432 \u0440\u0435\u0434. \u0417\u0430\u043a\u043e\u043d\u0430 \u2116115-\u0417\u0420\u0422 \u043e\u0442 13 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2014 \u0433. \u00ab\u041e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u0451\u043b\u043a\u0430 \u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441 \u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0412\u0432\u0435\u0434\u0435\u043d\u0441\u043a\u043e-\u0421\u043b\u043e\u0431\u043e\u0434\u0441\u043a\u043e\u0433\u043e \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0417\u0430\u043a\u043e\u043d \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d \"\u041e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u0438\u0439 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0439\u043e\u043d\" \u0438 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0435\"\u00bb. \u0412\u0441\u0442\u0443\u043f\u0438\u043b \u0432 \u0441\u0438\u043b\u0443 \u0441\u043e \u0434\u043d\u044f \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d: \"\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\", \u2116\u211618\u201319, 1 \u0444\u0435\u0432\u0440\u0430\u043b\u044f 2005 \u0433. (State Council of the Republic of Tatarstan. Law #19-ZRT of January 31, 2005 On Establishing the Borders of the Territories and the Status of the Municipal Formation of \"Verkhneuslonsky Municipal District\" and of the Municipal Formations It Comprises, as amended by the Law #115-ZRT of December 13, 2014 On the Transformation of the Settlement of Innopolis in Verkhneuslonsky District, on Changing the Borders of Several Municipal Formations, and on Transforming Vvedensko-Slobodskoye Rural Settlement in Verkhneuslonsky Municipal District, as well as Amending the Law of the Republic of Tatarstan \"On Establishing the Borders of the Territories and the Status of the Municipal Formation of \"Verkhneuslonsky Municipal District\" and of the Municipal Formations It Comprises\". Effective as of the day of the official publication.).\n\u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0421\u043e\u0432\u0435\u0442 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d. \u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u21162622-IV-\u0413\u0421 \u043e\u0442 24 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2012 \u0433. \u00ab\u041e\u0431 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430\u0441\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u2014 \u043f\u043e\u0441\u0451\u043b\u043a\u0430 \u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441 \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\u00bb. \u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d: \"\u0412\u0435\u0434\u043e\u043c\u043e\u0441\u0442\u0438 \u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0421\u043e\u0432\u0435\u0442\u0430 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\u0430\", \u211612 (III \u0447\u0430\u0441\u0442\u044c), \u0441\u0442. 1926, 2012. (State Council of the Republic of Tatarstan. Resolution #2622-IV-GS of December 24, 2012 On Establishing an Inhabited Locality\u2014the Settlement of Innopolis\u2014on the Territory of Verkhneuslonsky District of the Republic of Tatarstan. ).\n\u0413\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0421\u043e\u0432\u0435\u0442 \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d. \u0417\u0430\u043a\u043e\u043d \u2116115-\u0417\u0420\u0422 \u043e\u0442 13 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2014 \u0433. \u00ab\u041e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u0451\u043b\u043a\u0430 \u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441 \u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0412\u0432\u0435\u0434\u0435\u043d\u0441\u043a\u043e-\u0421\u043b\u043e\u0431\u043e\u0434\u0441\u043a\u043e\u0433\u043e \u0441\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0441\u0435\u043b\u0435\u043d\u0438\u044f \u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0439\u043e\u043d\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0417\u0430\u043a\u043e\u043d \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d \"\u041e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \"\u0412\u0435\u0440\u0445\u043d\u0435\u0443\u0441\u043b\u043e\u043d\u0441\u043a\u0438\u0439 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0439\u043e\u043d\" \u0438 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0435\"\u00bb. \u0412\u0441\u0442\u0443\u043f\u0438\u043b \u0432 \u0441\u0438\u043b\u0443 \u0441\u043e \u0434\u043d\u044f \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d: \"\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d\", \u2116183, 16 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 2014 \u0433. (State Council of the Republic of Tatarstan. Law #115-ZRT of December 13, 2014 On the Transformation of the Settlement of Innopolis in Verkhneuslonsky District, on Changing the Borders of Several Municipal Formations, and on Transforming Vvedensko-Slobodskoye Rural Settlement in Verkhneuslonsky Municipal District, as well as Amending the Law of the Republic of Tatarstan \"On Establishing the Borders of the Territories and the Status of the Municipal Formation of \"Verkhneuslonsky Municipal District\" and of the Municipal Formations It Comprises\". Effective as of the day of the official publication.).","thumbnail":{"source":"https://upload.wikimedia.org/wikipedia/commons/thumb/5/55/%D0%98%D0%BD%D0%BD%D0%BE%D0%BF%D0%BE%D0%BB%D0%B8%D1%81._%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BF%D0%B0%D1%80%D0%BA_%D0%B8%D0%BC._%D0%90.%D0%A1._%D0%9F%D0%BE%D0%BF%D0%BE%D0%B2%D0%B0.JPG/200px-%D0%98%D0%BD%D0%BD%D0%BE%D0%BF%D0%BE%D0%BB%D0%B8%D1%81._%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BF%D0%B0%D1%80%D0%BA_%D0%B8%D0%BC._%D0%90.%D0%A1._%D0%9F%D0%BE%D0%BF%D0%BE%D0%B2%D0%B0.JPG","width":200,"height":133},"pageimage":"\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441._\u0422\u0435\u0445\u043d\u043e\u043f\u0430\u0440\u043a_\u0438\u043c._\u0410.\u0421._\u041f\u043e\u043f\u043e\u0432\u0430.JPG","langlinks":[{"lang":"ba","*":"\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441"},{"lang":"bg","*":"\u0418\u043d\u043e\u043f\u043e\u043b\u0438\u0441"},{"lang":"he","*":"\u05d0\u05d9\u05e0\u05d5\u05e4\u05d5\u05dc\u05d9\u05e1"},{"lang":"hsb","*":"Innopolis"},{"lang":"lb","*":"Innopolis"},{"lang":"ru","*":"\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441"},{"lang":"tt","*":"\u0418\u043d\u043d\u043e\u043f\u043e\u043b\u0438\u0441"},{"lang":"wo","*":"Innopolis"}]}}}}
|
data/spec/lib/client_spec.rb
CHANGED
@@ -90,6 +90,30 @@ describe Wikipedia::Client, '.find page with one section (mocked)' do
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
+
describe Wikipedia::Client, '.find page with special characters in title' do
|
94
|
+
before(:each) do
|
95
|
+
@client = Wikipedia::Client.new
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should properly escape all special characters' do
|
99
|
+
@page = @client.find('A +&%=?:/ B')
|
100
|
+
expect(@page.title).to eq('A +&%=?:/ B')
|
101
|
+
expect(@page.fullurl).to eq('https://en.wikipedia.org/wiki/A_%2B%26%25%3D%3F:/_B')
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should handle pluses in article titles' do
|
105
|
+
@page = @client.find('C++')
|
106
|
+
expect(@page.title).to eq('C++')
|
107
|
+
expect(@page.fullurl).to eq('https://en.wikipedia.org/wiki/C%2B%2B')
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should handle slashes in article titles' do
|
111
|
+
@page = @client.find('PL/SQL')
|
112
|
+
expect(@page.title).to eq('PL/SQL')
|
113
|
+
expect(@page.fullurl).to eq('https://en.wikipedia.org/wiki/PL/SQL')
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
93
117
|
describe Wikipedia::Client, '.find image (mocked)' do
|
94
118
|
before(:each) do
|
95
119
|
@client = Wikipedia::Client.new
|
@@ -137,15 +161,9 @@ describe Wikipedia::Client, '.find page (Edsger_Dijkstra)' do
|
|
137
161
|
@client.follow_redirects = true
|
138
162
|
@page = @client.find('Edsger Dijkstra')
|
139
163
|
[
|
140
|
-
'/en/4/4a/Commons-logo.svg',
|
141
|
-
'/en/4/48/Folder_Hexagonal_Icon.svg',
|
142
164
|
'/commons/5/57/Dijkstra_Animation.gif',
|
143
165
|
'/commons/c/c9/Edsger_Dijkstra_1994.jpg',
|
144
|
-
'/commons/d/d9/Edsger_Wybe_Dijkstra.jpg'
|
145
|
-
'/commons/0/00/Complex-adaptive-system.jpg',
|
146
|
-
'/en/4/4d/Centrum-wiskunde-informatica-logo.png',
|
147
|
-
'/commons/7/7b/An_illustration_of_the_dining_philosophers_problem.png',
|
148
|
-
'/commons/3/37/Detail_of_a_1Kb_ferrite_core_RAM-module_of_an_1960s_Electrologica_X1_computer.jpg'
|
166
|
+
'/commons/d/d9/Edsger_Wybe_Dijkstra.jpg'
|
149
167
|
].each do |image|
|
150
168
|
expect(@page.image_urls).to include('https://upload.wikimedia.org/wikipedia' + image)
|
151
169
|
end
|
@@ -155,13 +173,9 @@ describe Wikipedia::Client, '.find page (Edsger_Dijkstra)' do
|
|
155
173
|
@client.follow_redirects = true
|
156
174
|
@page = @client.find('Edsger Dijkstra')
|
157
175
|
[
|
158
|
-
'/en/thumb/4/4a/Commons-logo.svg/200px-Commons-logo.svg.png',
|
159
|
-
'/en/thumb/4/48/Folder_Hexagonal_Icon.svg/200px-Folder_Hexagonal_Icon.svg.png',
|
160
176
|
'/commons/thumb/5/57/Dijkstra_Animation.gif/200px-Dijkstra_Animation.gif',
|
161
177
|
'/commons/thumb/c/c9/Edsger_Dijkstra_1994.jpg/200px-Edsger_Dijkstra_1994.jpg',
|
162
|
-
'/commons/thumb/d/d9/Edsger_Wybe_Dijkstra.jpg/200px-Edsger_Wybe_Dijkstra.jpg'
|
163
|
-
'/commons/thumb/0/00/Complex-adaptive-system.jpg/200px-Complex-adaptive-system.jpg',
|
164
|
-
'/en/thumb/4/4d/Centrum-wiskunde-informatica-logo.png/200px-Centrum-wiskunde-informatica-logo.png'
|
178
|
+
'/commons/thumb/d/d9/Edsger_Wybe_Dijkstra.jpg/200px-Edsger_Wybe_Dijkstra.jpg'
|
165
179
|
].each do |image|
|
166
180
|
expect(@page.image_thumburls).to include('https://upload.wikimedia.org/wikipedia' + image)
|
167
181
|
end
|
@@ -171,17 +185,20 @@ describe Wikipedia::Client, '.find page (Edsger_Dijkstra)' do
|
|
171
185
|
@client.follow_redirects = true
|
172
186
|
@page = @client.find('Edsger Dijkstra')
|
173
187
|
[
|
174
|
-
'/en/thumb/4/4a/Commons-logo.svg/100px-Commons-logo.svg.png',
|
175
|
-
'/en/thumb/4/48/Folder_Hexagonal_Icon.svg/100px-Folder_Hexagonal_Icon.svg.png',
|
176
188
|
'/commons/thumb/5/57/Dijkstra_Animation.gif/100px-Dijkstra_Animation.gif',
|
177
189
|
'/commons/thumb/c/c9/Edsger_Dijkstra_1994.jpg/100px-Edsger_Dijkstra_1994.jpg',
|
178
|
-
'/commons/thumb/d/d9/Edsger_Wybe_Dijkstra.jpg/100px-Edsger_Wybe_Dijkstra.jpg'
|
179
|
-
'/commons/thumb/0/00/Complex-adaptive-system.jpg/100px-Complex-adaptive-system.jpg',
|
180
|
-
'/en/thumb/4/4d/Centrum-wiskunde-informatica-logo.png/100px-Centrum-wiskunde-informatica-logo.png'
|
190
|
+
'/commons/thumb/d/d9/Edsger_Wybe_Dijkstra.jpg/100px-Edsger_Wybe_Dijkstra.jpg'
|
181
191
|
].each do |image|
|
182
192
|
expect(@page.image_thumburls(100)).to include('https://upload.wikimedia.org/wikipedia' + image)
|
183
193
|
end
|
184
194
|
end
|
195
|
+
|
196
|
+
it 'should collect the main image thumburl' do
|
197
|
+
@client.follow_redirects = true
|
198
|
+
@page = @client.find('Edsger Dijkstra')
|
199
|
+
image = '/commons/thumb/d/d9/Edsger_Wybe_Dijkstra.jpg/150px-Edsger_Wybe_Dijkstra.jpg'
|
200
|
+
expect(@page.main_image_thumburl).to include('https://upload.wikimedia.org/wikipedia' + image)
|
201
|
+
end
|
185
202
|
end
|
186
203
|
|
187
204
|
describe Wikipedia::Client, '.find page (Rails) at jp' do
|
@@ -246,3 +263,25 @@ describe Wikipedia::Client, '.find page (mocked)' do
|
|
246
263
|
expect(@page.image_urls).to eq(nil)
|
247
264
|
end
|
248
265
|
end
|
266
|
+
|
267
|
+
describe Wikipedia::Client, 'page.langlinks' do
|
268
|
+
before(:each) do
|
269
|
+
@client = Wikipedia::Client.new
|
270
|
+
@innopolis = File.read(File.dirname(__FILE__) + '/../fixtures/Innopolis.json')
|
271
|
+
expect(@client).to receive(:request).and_return(@innopolis)
|
272
|
+
end
|
273
|
+
|
274
|
+
it 'should contain langlinks' do
|
275
|
+
@page = @client.find('Innopolis')
|
276
|
+
expect(@page.langlinks).to include(
|
277
|
+
'ba' => 'Иннополис',
|
278
|
+
'bg' => 'Инополис',
|
279
|
+
'he' => 'אינופוליס',
|
280
|
+
'hsb' => 'Innopolis',
|
281
|
+
'lb' => 'Innopolis',
|
282
|
+
'ru' => 'Иннополис',
|
283
|
+
'tt' => 'Иннополис',
|
284
|
+
'wo' => 'Innopolis'
|
285
|
+
)
|
286
|
+
end
|
287
|
+
end
|
data/wikipedia-client.gemspec
CHANGED
@@ -19,7 +19,6 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.email = 'ken@kenpratt.net'
|
20
20
|
|
21
21
|
s.homepage = 'http://github.com/kenpratt/wikipedia-client'
|
22
|
-
s.rubygems_version = '1.8.23'
|
23
22
|
s.summary = 'Ruby client for the Wikipedia API'
|
24
23
|
s.platform = Gem::Platform::RUBY
|
25
24
|
s.files = `git ls-files`.split("\n")
|
@@ -32,10 +31,11 @@ Gem::Specification.new do |s|
|
|
32
31
|
s.require_paths << 'lib'
|
33
32
|
s.rdoc_options << '--title' << 'wikipedia-client' << '--main' << '-ri'
|
34
33
|
|
35
|
-
s.add_development_dependency('
|
34
|
+
s.add_development_dependency('pry', '~> 0.14')
|
35
|
+
s.add_development_dependency('rake', '~> 13.0')
|
36
36
|
s.add_development_dependency('rspec', '~> 3.0')
|
37
|
-
s.add_development_dependency('rdoc', '~>
|
38
|
-
s.add_development_dependency('jeweler', '~>
|
37
|
+
s.add_development_dependency('rdoc', '~> 6.0')
|
38
|
+
s.add_development_dependency('jeweler', '~> 2.0')
|
39
39
|
s.add_development_dependency('rubocop', '~> 0.48')
|
40
40
|
|
41
41
|
if s.respond_to? :specification_version
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wikipedia-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyril David
|
@@ -10,25 +10,39 @@ authors:
|
|
10
10
|
- Aishwarya Subramanian
|
11
11
|
- Pietro Menna
|
12
12
|
- Sophie Rapoport
|
13
|
-
autorequire:
|
13
|
+
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2021-04-03 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
|
+
- !ruby/object:Gem::Dependency
|
19
|
+
name: pry
|
20
|
+
requirement: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - "~>"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: '0.14'
|
25
|
+
type: :development
|
26
|
+
prerelease: false
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - "~>"
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0.14'
|
18
32
|
- !ruby/object:Gem::Dependency
|
19
33
|
name: rake
|
20
34
|
requirement: !ruby/object:Gem::Requirement
|
21
35
|
requirements:
|
22
36
|
- - "~>"
|
23
37
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
38
|
+
version: '13.0'
|
25
39
|
type: :development
|
26
40
|
prerelease: false
|
27
41
|
version_requirements: !ruby/object:Gem::Requirement
|
28
42
|
requirements:
|
29
43
|
- - "~>"
|
30
44
|
- !ruby/object:Gem::Version
|
31
|
-
version: '
|
45
|
+
version: '13.0'
|
32
46
|
- !ruby/object:Gem::Dependency
|
33
47
|
name: rspec
|
34
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -49,28 +63,28 @@ dependencies:
|
|
49
63
|
requirements:
|
50
64
|
- - "~>"
|
51
65
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
66
|
+
version: '6.0'
|
53
67
|
type: :development
|
54
68
|
prerelease: false
|
55
69
|
version_requirements: !ruby/object:Gem::Requirement
|
56
70
|
requirements:
|
57
71
|
- - "~>"
|
58
72
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
73
|
+
version: '6.0'
|
60
74
|
- !ruby/object:Gem::Dependency
|
61
75
|
name: jeweler
|
62
76
|
requirement: !ruby/object:Gem::Requirement
|
63
77
|
requirements:
|
64
78
|
- - "~>"
|
65
79
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
80
|
+
version: '2.0'
|
67
81
|
type: :development
|
68
82
|
prerelease: false
|
69
83
|
version_requirements: !ruby/object:Gem::Requirement
|
70
84
|
requirements:
|
71
85
|
- - "~>"
|
72
86
|
- !ruby/object:Gem::Version
|
73
|
-
version: '
|
87
|
+
version: '2.0'
|
74
88
|
- !ruby/object:Gem::Dependency
|
75
89
|
name: rubocop
|
76
90
|
requirement: !ruby/object:Gem::Requirement
|
@@ -89,20 +103,20 @@ dependencies:
|
|
89
103
|
name: thoughtbot-shoulda
|
90
104
|
requirement: !ruby/object:Gem::Requirement
|
91
105
|
requirements:
|
92
|
-
- - "
|
106
|
+
- - ">="
|
93
107
|
- !ruby/object:Gem::Version
|
94
108
|
version: '2.11'
|
95
|
-
- - "
|
109
|
+
- - "~>"
|
96
110
|
- !ruby/object:Gem::Version
|
97
111
|
version: '2.11'
|
98
112
|
type: :development
|
99
113
|
prerelease: false
|
100
114
|
version_requirements: !ruby/object:Gem::Requirement
|
101
115
|
requirements:
|
102
|
-
- - "
|
116
|
+
- - ">="
|
103
117
|
- !ruby/object:Gem::Version
|
104
118
|
version: '2.11'
|
105
|
-
- - "
|
119
|
+
- - "~>"
|
106
120
|
- !ruby/object:Gem::Version
|
107
121
|
version: '2.11'
|
108
122
|
description: Ruby client for the Wikipedia API
|
@@ -135,6 +149,7 @@ files:
|
|
135
149
|
- spec/fixtures/Edsger_Dijkstra_section_0.json
|
136
150
|
- spec/fixtures/Edsger_content.txt
|
137
151
|
- spec/fixtures/File_Edsger_Wybe_Dijkstra_jpg.json
|
152
|
+
- spec/fixtures/Innopolis.json
|
138
153
|
- spec/fixtures/Sealand_Dynasty.json
|
139
154
|
- spec/fixtures/sanitization_samples/Ceawlin_of_Wessex-raw.txt
|
140
155
|
- spec/fixtures/sanitization_samples/Ceawlin_of_Wessex-sanitized.txt
|
@@ -174,7 +189,7 @@ homepage: http://github.com/kenpratt/wikipedia-client
|
|
174
189
|
licenses:
|
175
190
|
- MIT
|
176
191
|
metadata: {}
|
177
|
-
post_install_message:
|
192
|
+
post_install_message:
|
178
193
|
rdoc_options:
|
179
194
|
- "--title"
|
180
195
|
- wikipedia-client
|
@@ -194,9 +209,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
209
|
- !ruby/object:Gem::Version
|
195
210
|
version: '0'
|
196
211
|
requirements: []
|
197
|
-
|
198
|
-
|
199
|
-
signing_key:
|
212
|
+
rubygems_version: 3.0.3
|
213
|
+
signing_key:
|
200
214
|
specification_version: 3
|
201
215
|
summary: Ruby client for the Wikipedia API
|
202
216
|
test_files:
|
@@ -205,6 +219,7 @@ test_files:
|
|
205
219
|
- spec/fixtures/Edsger_Dijkstra_section_0.json
|
206
220
|
- spec/fixtures/Edsger_content.txt
|
207
221
|
- spec/fixtures/File_Edsger_Wybe_Dijkstra_jpg.json
|
222
|
+
- spec/fixtures/Innopolis.json
|
208
223
|
- spec/fixtures/Sealand_Dynasty.json
|
209
224
|
- spec/fixtures/sanitization_samples/Ceawlin_of_Wessex-raw.txt
|
210
225
|
- spec/fixtures/sanitization_samples/Ceawlin_of_Wessex-sanitized.txt
|