4 | {% endfor %}
5 | {% endif %}
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include LICENSE
2 | include README.rst
3 | recursive-include real_content/content *
4 | recursive-include real_content/management *
5 | recursive-include real_content/templates *
6 | recursive-include real_content/templatetags *
7 | recursive-include docs *
8 |
9 | # exclude all bytecode
10 | global-exclude *.pyo
11 | global-exclude *.pyc
12 |
13 | # exclude dev stuff
14 | recursive-exclude demo *
15 | recursive-exclude drc *
--------------------------------------------------------------------------------
/real_content/settings.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | from django.conf import settings
4 |
5 | __all__ = [
6 | 'DRC_LANGUAGE',
7 | 'DRC_MISSING_FILE_MSG',
8 | 'DRC_EMPTY_FILE_MSG',
9 | 'DRC_NUMBER_START',
10 | 'DRC_NUMBER_END',
11 | ]
12 |
13 | # setting english as the default language
14 | DRC_LANGUAGE = getattr(settings, 'DRC_LANGUAGE', 'en')
15 | DRC_MISSING_FILE_MSG = 'language file does not exists'
16 | DRC_EMPTY_FILE_MSG = 'no usable lines in language file'
17 | # random number tag limits
18 | DRC_NUMBER_START = getattr(settings, 'DRC_NUMBER_START', 1)
19 | DRC_NUMBER_END = getattr(settings, 'DRC_NUMBER_END', 1000)
20 |
--------------------------------------------------------------------------------
/changelog.rst:
--------------------------------------------------------------------------------
1 | 0.1.11
2 | ======
3 | - added support for Django 1.10
4 |
5 | 0.1.10
6 | ======
7 | - removed titles from polish list of titles that weren't actually titles
8 |
9 | 0.1.9
10 | =====
11 | - coveralls badge fix that's bugging me
12 |
13 | 0.1.8
14 | =====
15 | - django 1.6 support check
16 | - better check if empty line in language file
17 | - added more tests
18 |
19 | 0.1.7
20 | =====
21 | - added more tests
22 | - took care of a few possible fringe cases in using templates
23 |
24 | 0.1.6
25 | =====
26 |
27 | - fix when returning only one paragraph
28 | - title tags takes any html tag
29 | - cleaned some de_paragraphs js junk
30 |
31 | 0.1.5
32 | =====
33 |
34 | - added drc_number tag
35 | - added rs content
36 | - decided to add a changelog
37 |
--------------------------------------------------------------------------------
/docs/advanced.rst:
--------------------------------------------------------------------------------
1 | Advanced
2 | ========
3 |
4 | Need more content?
5 | ------------------
6 |
7 | Use management command ``drc_addcontent`` to collect titles and
8 | paragraphs from given url. If no language is provided, it will use the
9 | one given in settings.
10 |
11 | ::
12 |
13 | python manage.py drc_addcontent -u http://www.24sata.hr/a-383985 -l hr
14 |
15 | Bare in mind that not all pages are structured ideally so unfortunately some trash could end up in language files.
16 |
17 | Contributing
18 | -------------
19 | Want to add more languages?
20 | Open an issue and I'll do my best. Or use github's push requests or you can even just e-mail them to me.
21 |
22 | Want to remove a title or a paragraph from some language files? Open an issue or a push request.
23 |
--------------------------------------------------------------------------------
/tests/settings.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | SECRET_KEY = 'dummy'
4 |
5 | INSTALLED_APPS = (
6 | 'real_content',
7 | 'tests',
8 | )
9 |
10 | DATABASES = {
11 | 'default': {
12 | 'ENGINE': 'django.db.backends.sqlite3',
13 | }
14 | }
15 |
16 | TEMPLATES = [
17 | {
18 | 'BACKEND': 'django.template.backends.django.DjangoTemplates',
19 | 'DIRS': [],
20 | 'APP_DIRS': True,
21 | 'OPTIONS': {
22 | 'context_processors': [
23 | 'django.template.context_processors.debug',
24 | 'django.template.context_processors.request',
25 | 'django.contrib.auth.context_processors.auth',
26 | 'django.contrib.messages.context_processors.messages',
27 | ],
28 | },
29 | },
30 | ]
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.py[cod]
2 | *.ipynb
3 |
4 | # project
5 | /media
6 | */settings/secret.py
7 | */settings/production.py
8 | /scripts/*
9 |
10 | # for local filebased email
11 | /email/*
12 |
13 | project.wsgi
14 |
15 | # Packages
16 | *.egg
17 | *.egg-info
18 | dist
19 | eggs
20 |
21 | # Installer logs
22 | pip-log.txt
23 |
24 | # Unit test / coverage reports
25 | .coverage
26 | .tox
27 | nosetests.xml
28 |
29 | # SublimeText project files
30 | *.sublime*
31 |
32 | # PyCharm project files
33 | .idea
34 |
35 | # Mac OS
36 | .DS_Store
37 | .AppleDouble
38 | .LSOverride
39 | .Spotlight-V100
40 | .Trashes
41 |
42 | # Windows
43 | Thumbs.db
44 | ehthumbs.db
45 | /*.bat
46 |
47 | # Folder config file
48 | Desktop.ini
49 |
50 | /*.log
51 |
52 | *.sqlite3
53 | .pypirc
54 |
55 | /demo
56 | /drc
57 | manage.py
58 |
59 | /docs/_build/
60 |
--------------------------------------------------------------------------------
/tox.ini:
--------------------------------------------------------------------------------
1 | [tox]
2 | envlist =
3 | py{27}-django{18,19,110,111},
4 | py{34}-django{111,20}
5 | py{35,36,37}-django{111,20,21}
6 |
7 | [testenv]
8 | setenv =
9 | PYTHONPATH = {toxinidir}
10 | DJANGO_SETTINGS_MODULE = tests.settings
11 | passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
12 | basepython =
13 | py27: python2.7
14 | py34: python3.4
15 | py35: python3.5
16 | py36: python3.6
17 | py37: python3.7
18 | commands =
19 | coverage run --source=real_content {envbindir}/django-admin.py test real_content
20 | coverage report -m
21 | deps =
22 | coverage
23 | coveralls
24 | django18: Django>=1.8, <1.9
25 | django19: Django>=1.9, <1.10
26 | django110: Django>=1.10, <1.11
27 | django111: Django>=1.11,<1.12
28 | django20: Django>=2.0,<2.1
29 | django21: Django>=2.1,<2.2
30 |
--------------------------------------------------------------------------------
/real_content/management/commands/drc_addcontent.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | from optparse import make_option
4 |
5 | from django.core.management import BaseCommand
6 |
7 | from real_content.drc_utils import parse_url
8 |
9 |
10 | class Command(BaseCommand):
11 | help = u"""
12 | Collect titles and paragraphs from given url.
13 | If no language is provided, it will use the one given in settings.
14 |
15 | Example:
16 | ./manage.py drc_addcontent -u http://www.24sata.hr/a-383985 -l hr
17 | """
18 |
19 | option_list = BaseCommand.option_list + (
20 | make_option('-u', '--url', action='store', dest='url',
21 | help=u'url to parse'),
22 | make_option('-l', '--language', action='store', dest='language',
23 | help=u'language of url'),
24 | )
25 |
26 | def handle(self, *args, **options):
27 | url = options.get('url', None)
28 | language = options.get('language', '')
29 |
30 | if url:
31 | parse_url(url, language)
32 | else:
33 | print('Enter url using "-u" option')
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Mislav Cimperšak
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/docs/index.rst:
--------------------------------------------------------------------------------
1 | .. django-real-content documentation master file, created by
2 | sphinx-quickstart on Sun Jun 14 13:31:41 2015.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | Welcome to django-real-content's documentation!
7 | ===============================================
8 |
9 | Django real content is a collection of template tags to quickly show real content instead of misleading `lorem ipsum `__.
10 | Useful to get a sense of real world content with fun local unicode
11 | characters.
12 |
13 | Works on Python >= 2.7 (including Python >= 3.5) and Django >= 1.6.
14 |
15 | You can view the source code for the project on `Github `__.
16 |
17 |
18 | Contents:
19 | ---------
20 |
21 | .. toctree::
22 | :maxdepth: 2
23 |
24 | Usage
25 | Advanced
26 |
27 |
28 | Installation
29 | ============
30 | You can get Django real content by using pip
31 |
32 | ::
33 |
34 | pip install django-real-content
35 |
36 |
37 | In your project's settings file add ``real_content`` to your INSTALLED\_APPS setting and ``DRC_LANGUAGE`` setting (if none is set, english will be used).
38 |
39 | ::
40 |
41 | INSTALLED_APPS = (
42 | # ...
43 | 'real_content',
44 | )
45 |
46 | DRC_LANGUAGE = 'hr'
47 |
48 |
49 | Languages currently supported out of the box
50 | --------------------------------------------
51 |
52 | - cz, de, en, es, fr, gr, hr, it, nl, pl, rs, ru, si
53 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: python
2 |
3 | cache:
4 | directories:
5 | - $HOME/.cache/pip
6 | before_cache:
7 | - rm -f $HOME/.cache/pip/log/debug.log
8 |
9 | matrix:
10 | include:
11 | # py27
12 | - python: 2.7
13 | env: TOX_ENV=py27-django18, DJANGO_VERSION=1.8.19
14 | - python: 2.7
15 | env: TOX_ENV=py27-django19, DJANGO_VERSION=1.9.13
16 | - python: 2.7
17 | env: TOX_ENV=py27-django110, DJANGO_VERSION=1.10.8
18 | - python: 2.7
19 | env: TOX_ENV=py27-django111, DJANGO_VERSION=1.11.20
20 | # py34
21 | - python: 3.4
22 | env: TOX_ENV=py34-django111, DJANGO_VERSION=1.11.20
23 | - python: 3.4
24 | env: TOX_ENV=py34-django20, DJANGO_VERSION=2.0.13
25 | # py35
26 | - python: 3.5
27 | env: TOX_ENV=py35-django111, DJANGO_VERSION=1.11.20
28 | - python: 3.5
29 | env: TOX_ENV=py35-django20, DJANGO_VERSION=2.0.13
30 | - python: 3.5
31 | env: TOX_ENV=py35-django21, DJANGO_VERSION=2.1.7
32 | # py36
33 | - python: 3.6
34 | env: TOX_ENV=py36-django111, DJANGO_VERSION=1.11.20
35 | - python: 3.6
36 | env: TOX_ENV=py36-django20, DJANGO_VERSION=2.0.13
37 | - python: 3.6
38 | env: TOX_ENV=py36-django21, DJANGO_VERSION=2.1.7
39 | # py37
40 | - python: 3.7
41 | dist: xenial
42 | sudo: true
43 | env: TOX_ENV=py37-django111, DJANGO_VERSION=1.11.20
44 | - python: 3.7
45 | dist: xenial
46 | sudo: true
47 | env: TOX_ENV=py37-django20, DJANGO_VERSION=2.0.13
48 | - python: 3.7
49 | dist: xenial
50 | sudo: true
51 | env: TOX_ENV=py37-django21, DJANGO_VERSION=2.1.7
52 |
53 | script: tox -e $TOX_ENV
54 |
55 | install:
56 | - pip install pip setuptools wheel -U
57 | - pip install -q Django==$DJANGO_VERSION
58 | - python setup.py -q install
59 | - pip install coveralls
60 | - pip install tox
61 |
62 | after_success:
63 | - coveralls
64 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import os
4 | from setuptools import setup, find_packages
5 |
6 | with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
7 | README = readme.read()
8 |
9 | # allow setup.py to be run from any path
10 | os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
11 |
12 |
13 | def read(fname):
14 | return open(os.path.join(os.path.dirname(__file__), fname)).read()
15 |
16 | setup(
17 | name='django-real-content',
18 | version='0.1.11',
19 | packages=find_packages(),
20 | # packages=find_packages(exclude=("tests",)),
21 | include_package_data=True,
22 | license='MIT',
23 | description='Template tags to quickly show real content instead of lorem ipsum.',
24 | long_description=README,
25 | url='https://github.com/mislavcimpersak/django-real-content',
26 | download_url='https://github.com/mislavcimpersak/django-real-content/tarball/0.1.11',
27 | author=u'Mislav Cimperšak',
28 | author_email='mislav.cimpersak@gmail.com',
29 | keywords='django real content lorem ipsum',
30 | install_requires=[
31 | 'Django>=1.6',
32 | 'beautifulsoup4>=4.3'
33 | ],
34 | tests_require=[
35 | 'Django>=1.6',
36 | 'beautifulsoup4>=4.3',
37 | 'coverage',
38 | 'tox'
39 | ],
40 | classifiers=[
41 | 'Development Status :: 4 - Beta',
42 | 'Environment :: Web Environment',
43 | 'Framework :: Django',
44 | 'Framework :: Django :: 1.6',
45 | 'Framework :: Django :: 1.7',
46 | 'Framework :: Django :: 1.8',
47 | 'Framework :: Django :: 1.9',
48 | 'Framework :: Django :: 1.10',
49 | 'Framework :: Django :: 1.11',
50 | 'Intended Audience :: Developers',
51 | 'License :: OSI Approved :: MIT License',
52 | 'Operating System :: OS Independent',
53 | 'Programming Language :: Python',
54 | 'Programming Language :: Python :: 3',
55 | 'Framework :: Django',
56 | 'Topic :: Internet :: WWW/HTTP',
57 | 'Topic :: Software Development :: Libraries :: Python Modules',
58 | ],
59 | )
60 |
--------------------------------------------------------------------------------
/real_content/content/de_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-09T11:19:42.930990
2 | # http://www.spiegel.de/wirtschaft/soziales/drohender-grexit-tsipras-warnt-von-kettenreaktion-a-1037857.html
3 | Griechenland: Alexis Tsipras prophezeit Horrorszenario bei Grexit
4 | Drohender Euro-Ausstieg: Tsipras prophezeit Horrorszenario für die EU
5 | Finanzkrise in Griechenland
6 | # 2015-06-09T11:20:59.685031
7 | # http://www.spiegel.de/panorama/australien-roger-ist-das-staerkste-kaenguru-der-welt-a-1037629.html
8 | Australien: Roger ist das stärkste Känguru der Welt
9 | # 2015-06-09T11:20:59.686934
10 | # http://www.spiegel.de/panorama/australien-roger-ist-das-staerkste-kaenguru-der-welt-a-1037629.html
11 | Känguru-Kraftpaket: Leg dich nicht mit Roger an
12 | MEHR AUS DEM RESSORT PANORAMA
13 | # 2015-06-09T11:20:59.689574
14 | # http://www.spiegel.de/panorama/australien-roger-ist-das-staerkste-kaenguru-der-welt-a-1037629.html
15 | Mehr Serviceangebote von SPIEGEL-ONLINE-Partnern
16 | # 2015-06-09T11:21:35.221415
17 | # http://www.spiegel.de/panorama/leute/kate-moss-stoerendes-verhalten-an-bord-von-easyjet-flug-a-1037633.html
18 | Kate Moss fliegt aus Easyjet
19 | Top-Model im Billigflieger: Kate Moss fliegt aus Easyjet
20 | # 2015-06-09T11:21:39.881451
21 | # http://www.spiegel.de/kultur/tv/anne-will-uebernimmt-talk-platz-von-guenther-jauch-a-1037896.html
22 | Anne Will übernimmt Talk Platz von Günther Jauch
23 | ARD-Polittalk: Anne Will übernimmt Sendeplatz von Günther Jauch
24 | # 2015-06-09T11:36:18.026129
25 | # http://www.tagesschau.de/wirtschaft/deutsche-bank-razzia-101.html
26 | Ermittlungen wegen Steuerbetrugs Wieder Razzia bei Deutscher Bank
27 | Auch Razzien im Ausland
28 | Überblick über die tagesschau.de-Seiten und weitere ARD Online-Angebote
29 | Justiz bestätigt nur "prozessuale Zwangsmaßnahmen"
30 | Wie funktionieren "Cum-Ex"-Geschäfte?
31 | # 2015-06-09T11:37:45.205076
32 | # http://boerse.ard.de/aktien/deutsche-bank-erneut-im-visier100.html
33 | Die Baustellen der Deutschen Bank
34 | Deutsche Bank erneut im Visier
35 | Die Top-10-Dividendenstars im MDax
36 | Abspaltung des Privatkundengeschäfts?
37 | Investmentbanking bleibt
38 | Die Dividendenstars im EuroStoxx 50
39 | Gefallene Engel wecken Begehrlichkeiten
40 | Die Top-10-Dividendenstars im Dax
41 | Kampf um Gerechtigkeit
42 | Auf diese IPOs dürfen wir uns freuen
43 | Die Macht hinter dem Euro
44 |
--------------------------------------------------------------------------------
/real_content/content/gr_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-14T12:53:17.375533
2 | # http://www.gazzetta.gr/
3 | Ενας μάνατζερ με cojones για Τρεμπλ
4 | «Άμεσα η συζήτηση με την διοίκηση»!
5 | Δύο στο κάδρο για τον Παναθηναϊκό!
6 | Βαβρίνκα: Είναι ένας απ' αυτούς!
7 | Γιατρέ μου, ένα χάπι...
8 | O στόχος του Ολυμπιακού Κακουτά
9 | Μερσιάδη στο gazzetta.gr: «Η παραίτηση Μπλάτερ είναι μόνο η αρχή»
10 | ΠΑΟΚ, το απόλυτο φιάσκο!
11 | Έφυγαν από τη Λίβερπουλ και πήραν Τσάμπιονς Λιγκ!
12 | Αυτός είναι ο Τούντορ που πάει στον ΠΑΟΚ
13 | Το crash test των υποψήφιων προπονητών για τον Ολυμπιακό
14 | Παναθηναϊκός - Ολυμπιακός 69-76
15 | Γι αυτό θα λατρέψεις τον Μπερμπάτοφ!
16 | Ντελαβεντόβα εσύ… σούπερσταρ!
17 | Κόπα Αμέρικα: 5 «μαγικές» ποδοσφαιρικές ιστορίες
18 | Θα ήταν ένας από τους κατάλληλους…
19 | Mε Καραγκούνη, Μαρκαριάν δεν χρειάζεται σκούπα;
20 | Στάικος: Η αγάπη του για το ποδόσφαιρο... νίκησε το πρόβλημα υγείας!
21 | Ο Κατσουράνης, ο Καραγκούνης κι ο Σάντος μας έφταιγαν...
22 | Προτάθηκε ο Πάτο στον Ολυμπιακό!
23 | Ούτε Πελέ, ούτε Μαραντόνα
24 | Αυτός είναι ο Εσκριμπά που θέλει ο Ολυμπιακός
25 | Ένας… άλλος Ντάρντεν κόντρα στον Παναθηναϊκό!
26 | Ο AJ Σλότερ στο gazzetta.gr: «Μπορούμε, δεν έχει τελειώσει!»
27 | «Επαφές αλλά όχι συμφωνία Ολυμπιακού με Εσκριμπά»
28 | Η σύγκριση Μέσι και Ρονάλντο για το 2015
29 | Η 11άδα που «χρύσωσε» τη Σεβίλλη
30 | Είναι ο Στέφανος Αθανασιάδης ο ηγέτης του ΠΑΟΚ;
31 | Η αλητεία της ποδοσφαιρικής ψυχής μας
32 | Είναι λάθος η επιστροφή του Μίτσελ στον Ολυμπιακό;
33 | «Είμαι Ολυμπιακός, έρχομαι Καραϊσκάκη»
34 | Με 12μηνη καθυστέρηση ο Σαββίδης βάζει τον ΠΑΟΚ στον ορθό δρόμο
35 | Σπλας στα μούτρα τους
36 | Η καλύτερη 11άδα του Champions League!
37 | # 2015-06-14T12:56:25.975153
38 | # http://www.gazzetta.gr/stili/media-cafe/article/758597/i-ert-anoixe-alla-pos-kai-giati-eihe-kleisei
39 | Η ΕΡΤ άνοιξε… αλλά πώς και γιατί είχε κλείσει;
40 | Βαβρίνκα: Είναι ένας απ' αυτούς!
41 | Τσίπρας στην ΕΡΤ με «μηνύματα» για την διαπραγμάτευση
42 | Η κάλυψη της Εθνικής, οι «αιώνιοι», ο Νεϊμάρ, ο Μέσι και οι γκάφες!
43 | Ντελαβεντόβα εσύ… σούπερσταρ!
44 | Κόπα Αμέρικα: 5 «μαγικές» ποδοσφαιρικές ιστορίες
45 | Το G-Weekend Journal... είναι ξανά εδώ!
46 | Ένας… άλλος Ντάρντεν κόντρα στον Παναθηναϊκό!
47 | Είναι ο Στέφανος Αθανασιάδης ο ηγέτης του ΠΑΟΚ;
48 | Είναι λάθος η επιστροφή του Μίτσελ στον Ολυμπιακό;
49 | Πόντες στο gazzetta.gr: «Θέλω τον Παναιτωλικό στην εξάδα»
50 |
--------------------------------------------------------------------------------
/README.rst:
--------------------------------------------------------------------------------
1 | ===================
2 | django-real-content
3 | ===================
4 |
5 | .. image:: https://travis-ci.org/mislavcimpersak/django-real-content.svg?branch=master
6 | :target: https://travis-ci.org/mislavcimpersak/django-real-content
7 |
8 | .. image:: https://coveralls.io/repos/github/mislavcimpersak/django-real-content/badge.svg?branch=master
9 | :target: https://coveralls.io/github/mislavcimpersak/django-real-content?branch=master
10 |
11 |
12 | Template tags to quickly show real content instead of misleading `lorem
13 | ipsum `__.
14 | Useful to get a sense of real world content with fun local unicode
15 | characters.
16 |
17 | Works on Python >= 2.7 (including Python >= 3.5) and Django >= 1.6.
18 |
19 | Documentation
20 | -------------
21 | `Read the Docs `__
22 |
23 | Installation
24 | ------------
25 |
26 | ::
27 |
28 | pip install django-real-content
29 |
30 | In your project's settings file add ``real_content`` to your INSTALLED\_APPS setting and ``DRC_LANGUAGE`` setting (if none is set, english will be used).
31 |
32 | ::
33 |
34 | INSTALLED_APPS = (
35 | # ...
36 | 'real_content',
37 | )
38 |
39 | DRC_LANGUAGE = 'hr'
40 |
41 | Languages currently supported out of the box
42 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 |
44 | - cz, de, en, es, fr, gr, hr, it, nl, pl, rs, ru, si
45 |
46 | Usage:
47 | ------
48 |
49 | Explaind in more detail on `read the docs `__.
50 |
51 | Load django-real-content in your template.
52 |
53 | ::
54 |
55 | {% load drc %}
56 |
57 | random title
58 | ~~~~~~~~~~~~
59 |
60 | show random title with h3 tag
61 |
62 | ::
63 |
64 | {% drc_title 'h3' %}
65 |
66 |
67 | random paragraphs
68 | ~~~~~~~~~~~~~~~~~
69 |
70 | show 3 random paragraphs
71 |
72 | ::
73 |
74 | {% drc_paragraphs 3 %}
75 |
76 |
77 | random image
78 | ~~~~~~~~~~~~~
79 |
80 | show random image from lorempixel.com which dimensions are 420x360
81 |
82 | ::
83 |
84 | {% drc_image 420 360 %}
85 |
86 |
87 | random number
88 | ~~~~~~~~~~~~~
89 |
90 | show a random number between 1 and 100
91 |
92 | ::
93 |
94 | {% drc_number 1 100 %}
95 |
96 |
97 | Content sources
98 | ---------------
99 |
100 | Various localised news portals and local wikipedia in some cases.
101 |
102 | TODO
103 | ----
104 |
105 | - add more languages in the package as standard (fi, pt...)
106 |
--------------------------------------------------------------------------------
/docs/usage.rst:
--------------------------------------------------------------------------------
1 | Usage
2 | =====
3 |
4 | Load django-real-content in your template.
5 |
6 | ::
7 |
8 | {% load drc %}
9 |
10 | random title
11 | ------------
12 |
13 | show random title
14 |
15 | ::
16 |
17 | {% drc_title %}
18 |
19 | show random title using ``h3`` html tag
20 |
21 | ::
22 |
23 | {% drc_title 'h3' %}
24 |
25 |
26 | show random title using ``span`` html tag and with additional css class
27 |
28 | ::
29 |
30 | {% drc_title 'span' css_class='custom_css_class' %}
31 |
32 | show random title using ``h3`` html tag with additional css class and language explicitly set (if you don't set language explicitly, tag will use language setting from your django project's settings)
33 |
34 | ::
35 |
36 | {% drc_title 'h3' css_class='custom_css_class' language='si' %}
37 |
38 |
39 | random paragraphs
40 | -----------------
41 |
42 | show 1 random paragraph
43 |
44 | ::
45 |
46 | {% drc_paragraphs %}
47 |
48 | show 3 random paragraphs
49 |
50 | ::
51 |
52 | {% drc_paragraphs 3 %}
53 |
54 | show 1 random paragraph with additional css class
55 |
56 | ::
57 |
58 | {% drc_paragraphs css_class='custom_css_class' %}
59 |
60 | show 3 random paragraphs with additional css class
61 |
62 | ::
63 |
64 | {% drc_paragraphs 3 css_class='custom_css_class' %}
65 |
66 | show 3 random paragraphs with additional css class and language explicitly set (if you don't set language explicitly, tag will use language setting from your django project's settings)
67 |
68 | ::
69 |
70 | {% drc_paragraphs 3 css_class='custom_css_class' language='si' %}
71 |
72 |
73 | random image
74 | -------------
75 |
76 | show random image from `lorempixel.com `_
77 |
78 | ::
79 |
80 | {% drc_image %}
81 |
82 | show random image from lorempixel.com which dimensions are 420x360
83 |
84 | ::
85 |
86 | {% drc_image 420 360 %}
87 |
88 | show random image from lorempixel.com which dimensions are 420x360 in
89 | category "cats" and grayscale
90 |
91 | ::
92 |
93 | {% drc_image 420 360 category='cats' gray=True %}
94 |
95 | show random image from lorempixel.com which dimensions are 420x360 in
96 | category "cats", grayscale and with additional css class
97 |
98 | ::
99 |
100 | {% drc_image 420 360 category='sports' gray=True css_class='custom_css_class' %}
101 |
102 |
103 | random number
104 | -----------------
105 |
106 | show a random number (it's minimum and maximum values are set in DRC_NUMBER_START and DRC_NUMBER_END settings)
107 |
108 | ::
109 |
110 | {% drc_number %}
111 |
112 | show a random number between 1 and 100
113 |
114 | ::
115 |
116 | {% drc_number 1 100 %}
117 |
--------------------------------------------------------------------------------
/real_content/content/si_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-09T18:35:14.957017
2 | # http://www.slovenskenovice.si/novice/slovenija/ce-potujete-na-hrvasko-tankajte-doma-bo-ceneje
3 | Bo štiriletno Lano rešil ruski kirurg?
4 | Sava dobila nazaj delnice, a z njimi ne sme razpolagati
5 | Pod zemljo bobni, že tri leta ne spijo
6 | FOTO: Besni neurje, vmes pada toča
7 | Če potujete na Hrvaško, tankajte doma – bo ceneje
8 | V Avstriji boste za vse vrste goriva odšteli manj kot v Sloveniji. Najdražja ostaja Nizozemska.
9 | # 2015-06-09T18:37:23.955273
10 | # http://www.slovenskenovice.si/novice/svet/v-bundi-tudi-sredi-poletja
11 | V bundi tudi sredi poletja
12 | FOTO: Kovanci za 2,5 evra kot spomin na zgodovinski poraz
13 | Junij se je začel tako, kot se spodobi. S soncem in temperaturami, ki že kličejo po poletnih oblačilih. S prvim letošnjim vročinskim valom. A medtem ko nekateri že radostno pričakujejo pravo poletje, to v nekatere kotičke sveta nikdar ne pride.
14 | # 2015-06-09T18:37:35.359708
15 | # http://www.slovenskenovice.si/novice/svet/francisek-v-sarajevu-o-tretji-svetovni-vojni
16 | Frančišek v Sarajevu o tretji svetovni vojni
17 | VIDEO: V obsežnem požaru v skladišču goriva umrlo več gasilcev
18 | Hadžić zaradi bolezni znova v Srbiji
19 | Indijski boj za boljšo šolsko hrano
20 | Z navdušeno množico papeža v Sarajevu pozdravili tudi slovenski romarji.
21 | # 2015-06-09T18:41:44.703460
22 | # http://www.24ur.com/novice/gospodarstvo/analitiki-na-obzorju-so-boljsi-casi.html
23 | Analitiki: Na obzorju so boljši časi
24 | Na območju Brežic in Krškega možna tudi toča
25 | # 2015-06-09T18:42:58.242923
26 | # http://www.24ur.com/novice/crna-kronika/pozar-v-mercatorjevem-skladiscu-inspektorat-ugotovil-da-je-bila-pozarna-straza-opuscena.html
27 | Stand-Up Comedy Vid Valič Roast
28 | Požar v Mercatorjevem skladišču: Inšpektorat ugotovil, da je bila požarna straža opuščena
29 | Prijatelja samo za seks
30 | Najbolj jezen človek v Brooklynu
31 | Na območju Krškega zaradi udara strele gori stanovanjska hiša
32 | Friends With Benefits / Film
33 | Prekmurci varni, pri vrtinah pri Lendavi med odpadki ni bilo strupenih kemikalij
34 | Nas črna majica ščiti bolj kot bela?
35 | Ogled videovsebin omogoča VOYO
36 | Date and Switch / Film
37 | VIDEO: Leteči krožnik sicer leti, pristati pa (še) ne zna
38 | Maradona bi bil podpredsednik
39 | Kje menite, da se več dela?
40 | # 2015-06-09T18:55:54.614217
41 | # http://www.24ur.com/sport/nogomet/bilic-se-vraca-na-otok-prevzel-bo-west-ham.html
42 | Bilić se vrača na Otok, prevzel bo West Ham
43 | United brez lovorike, a vseeno pred Bayernom, Realom, Barco
44 | Blatter v vedno večjih težavah: e-mail, ki dokazuje 10 milijonsko podkupnino
45 | Hodgson si želi več odgovornosti, tudi od Rooneyja
46 | Mladi slovenski nogometaši premagali Andoro
47 | V Kataloniji bo najboljše pričakal Stoner
48 | Bešiktaš oddal ponudbo za Ronaldinha
49 |
--------------------------------------------------------------------------------
/real_content/content/nl_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-10T08:16:06.133377
2 | # http://www.telegraaf.nl/binnenland/24139316/__Het_gesprek_van_de_dag__.html
3 | Het gesprek van de dag: woensdag 10 juni
4 | # 2015-06-10T08:17:32.342800
5 | # http://www.nu.nl/binnenland/4065611/acht-tips-binnen-liquidatie-zaandam.html
6 | Acht tips binnen over liquidatie Zaandam
7 | Dode bij schietpartij in Zaandam
8 | # 2015-06-10T08:26:01.503446
9 | # http://nos.nl/artikel/2040513-acht-tips-over-liquidatie-zaandam.html
10 | Acht tips over liquidatie Zaandam
11 | # 2015-06-10T08:28:42.310644
12 | # http://www.nrc.nl/nieuws/2015/06/10/hanzehogeschool-groningen-claimt-60-tot-120-miljoen-van-nam/
13 | Hanzehogeschool Groningen claimt 60 tot 120 miljoen van NAM
14 | Meer organisaties stellen NAM aansprakelijk
15 | Over naaktloperij en overspel in Marokko
16 | Politie Tilburg wil discriminatie bestrijden met ‘stopformulieren’
17 | Klamme handjes: durfal beklimt 133 meter hoge boog over Wembley-stadion
18 | ‘FIFA-verkiezing op 16 december, datum heeft voorkeur Blatter’
19 | Agent in VS neemt ontslag na ophef over gewelddadig ingrijpen
20 | Uit nrc.next: Albert Woodfox zit al meer dan 15.000 dagen in zo’n hokje
21 | Bruikbare tips over liquidatie Zaandam na Opsporing Verzocht
22 | NZa: bonus voor huisarts is goede zaak
23 | ‘VS overwegen honderden extra militairen naar Irak te sturen’
24 | Uit NRC: Zodat ze zo lang mogelijk thuis kunnen blijven wonen
25 | Agent in VS neemt ontslag na ophef over gewelddadig ingrijpen
26 | Kijken: game Grand Theft Auto indrukwekkend nagemaakt in het echt
27 | Wie wil er nog bouwen voor Rijkswaterstaat?
28 | CPB: Nederlandse economie groeit dit jaar met 2 procent
29 | Longread: Angstaanjagende reis van Bernard (10) in de kolenmijn bij Leeds
30 | CPB: Nederlandse economie groeit dit jaar met 2 procent
31 | Bruikbare tips over liquidatie Zaandam na Opsporing Verzocht
32 | Palestijn doodgeschoten na confrontatie met Israëlische paramilitairen
33 | Zijn we ein-de-lijk uit de crisis?
34 | Ontmijningsdienst onderzoekt voertuig in Europese wijk, Brussel
35 | Carolien Roelants: Over naaktloperij en overspel in Marokko
36 | YKK staat op bijna alle ritsen (kijk maar)
37 | Hanzehogeschool Groningen claimt 60 tot 120 miljoen van NAM
38 | Half werkend Nederland is nu hoogopgeleid
39 | ‘FIFA-verkiezing op 16 december, datum heeft voorkeur Blatter’
40 | # 2015-06-10T08:29:53.616227
41 | # http://www.nrc.nl/nieuws/2015/06/09/roep-om-ontslag-agent-na-racistische-arrestatie-bij-poolparty/
42 | Roep om ontslag agent na ‘racistische’ arrestatie bij poolparty
43 | Ongehoorzaamheid of racisme?
44 | # 2015-06-10T08:32:26.063835
45 | # http://www.nrc.nl/nieuws/2015/02/02/gebouwen-europees-parlement-ontruimd-verdacht-voertuig-aangetroffen/
46 | Derde bommelding in Brussel in een dag - man opgepakt
47 | Man in legerkleding opgepakt
48 | Politie Tilburg wil discriminatie bestrijden met ‘stopformulieren’
49 |
--------------------------------------------------------------------------------
/real_content/content/fr_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-10T08:37:02.573624
2 | # http://www.lemonde.fr/immigration-et-diversite/article/2015/06/09/dans-le-18e-arrondissement-riverains-et-militants-se-mobilisent-contre-l-evacuation-de-migrants_4650715_1654200.html
3 | Dans le 18e arrondissement, riverains et militants se mobilisent contre l’évacuation de migrants
4 | « Ce pays qui n’assume pas sa responsabilité d’accueil »
5 | Sandwichs, conserves et brioches
6 | Racisme : un blogueur breton condamné à de la prison ferme
7 | A Tourcoing, la colère des habitants du quartier de la Bourgogne
8 | # 2015-06-10T08:39:12.268519
9 | # http://www.lemonde.fr/
10 | Duflot à Hollande : « Notre politique d'immigration est un Waterloo moral »
11 | Yann LeCun, l’intelligence en réseaux
12 | Anish Kapoor transforme Versailles en parc d’attractions
13 | Découvrez la newsletter Pixels
14 | Le Koweït censure les photos de nus dans les manuels du lycée français
15 | Stefan Simchowitz, le requin de l'art contemporain
16 | Les banques revoient leurs modèles, et la facture sociale est lourde
17 | Poutine à Rome : respect, business et dépendance
18 | « Un Français » : l’extrême droite à bras-le-corps
19 | Pauvreté des enfants : une réalité qu’on ne cesse de redécouvrir
20 | Crise ukrainienne : Moscou laisse planer un doute sur le sort des accords de Minsk
21 | Duflot à Hollande : « Notre politique d'immigration est un Waterloo moral »
22 | 30 ans après son éradication, la diphtérie réapparaît en Espagne
23 | Le gouvernement privatise Arianespace
24 | Affaire Bettencourt : le procès Prévost-Desprez révèle la guerre des juges
25 | A Paris, 15 % des studios affichent des loyers abusifs
26 | Après un débat focalisé sur le terrorisme, le Sénat vote la loi sur le renseignement
27 | Les banques revoient leurs modèles, et la facture sociale est lourde
28 | Mondial de foot féminin, la vague bleue Visuel interactif
29 | L’arrestation musclée d’une jeune Noire ravive les tensions raciales aux Etats-Unis
30 | La sécurité dans les aéroports américains mise en cause
31 | Anish Kapoor à Versailles : reflets, cavités et rouge sang Portfolio
32 | Gens du voyage : l'Assemblée vote la suppression du livret de circulation
33 | Big Browser Le Monde.fr surveille le Web pour vous
34 | Ces boucaniers chinois qui se partagent les richesses africaines
35 | RDC : dans le parc des Virunga, l’armée à la solde d'un pétrolier
36 | Lancement d’un nouveau traité de libre-échange africain
37 | SNCM : pas sûr que l’heure de la reprise ait sonné
38 | Euro 2016 : les billets sont en vente
39 | Traité transatlantique : le Parlement européen se divise et reporte son vote
40 | Mondial de football féminin : les Bleues l'emportent face aux Anglaises
41 | L’avion qui n’était pas le MH370
42 | Facebook parie sur les « beacons » pour connecter ses utilisateurs avec les commerçants
43 | Les corps de 44 victimes du crash de Germanwings sont arrivés en Allemagne
44 | Neuf personnes mortes du coronavirus MERS en Corée du Sud
45 | Washington veut former davantage de troupes irakiennes
46 | # 2015-06-10T08:42:30.943610
47 | # http://www.lemonde.fr/societe/article/2015/06/10/l-assemblee-vote-la-suppression-du-livret-de-circulation-pour-les-gens-du-voyage_4650732_3224.html
48 | L’Assemblée vote la suppression du livret de circulation pour les gens du voyage
49 | 65 % des communes en règle
50 | # 2015-06-10T08:43:24.663500
51 | # http://www.lemonde.fr/afrique/article/2015/06/10/dans-le-parc-congolais-des-virunga-l-armee-a-la-solde-du-petrolier-soco_4650727_3212.html
52 | Dans le parc congolais des Virunga, l’armée à la solde du pétrolier SOCO
53 | En accord avec le gouvernement congolais
54 |
--------------------------------------------------------------------------------
/real_content/drc_utils.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import codecs
4 | from datetime import datetime
5 | import os
6 |
7 | try:
8 | from urllib.request import urlopen, HTTPError, URLError # py3
9 | except ImportError:
10 | from urllib2 import urlopen, HTTPError, URLError # py2
11 | from bs4 import BeautifulSoup
12 |
13 | from real_content.settings import DRC_LANGUAGE
14 |
15 |
16 | def get_language(language=''):
17 | u"""
18 | Gets language from settings if it wasn't explicitly provided.
19 | """
20 | if language == '' or language is None:
21 | language = DRC_LANGUAGE
22 | language = language.lower().strip()
23 | return language
24 |
25 |
26 | def get_text_file(language, text_type='titles', file_open_mode='r'):
27 | u"""
28 | Gets text file for specific language.
29 | Used for reading and writing to a file.
30 | """
31 | content_dir = os.path.abspath(
32 | os.path.join(os.path.dirname(__file__), 'content'))
33 | content_file_path = os.path.join(
34 | content_dir, '{}_{}.txt'.format(language, text_type))
35 |
36 | if os.path.exists(content_file_path) or 'a' in file_open_mode:
37 | content_file = codecs.open(content_file_path, file_open_mode, 'utf-8')
38 | return content_file
39 | else:
40 | return None
41 |
42 |
43 | def save_content(content, tag, text_type='paragraphs', url='', language='',
44 | min_length=150):
45 | u"""
46 | Saves content to language file.
47 | """
48 | new_data = []
49 |
50 | for tag in content.find_all(tag):
51 | new_content = ' '.join(
52 | [part.strip() for part in tag.getText().split('\n')]).strip()
53 |
54 | if len(new_content) > min_length:
55 | new_data.append(new_content)
56 |
57 | # getting rid of duplicates in new data
58 | new_data = list(set(new_data))
59 |
60 | # remove previously existing items from new data
61 | existing_file = get_text_file(language, text_type, 'r')
62 | if existing_file:
63 | existing_data = existing_file.read().splitlines()
64 | else:
65 | existing_data = []
66 |
67 | new_data_copy = new_data[:]
68 | for text in new_data_copy:
69 | if text in existing_data:
70 | new_data.remove(text)
71 |
72 | # put date and source as comments at the beginning of new data
73 | if len(new_data) > 0:
74 | new_data.insert(0, '# {}'.format(url))
75 | new_data.insert(0, '# {}'.format(datetime.now().isoformat()))
76 |
77 | # write line from new_data one by one into local file
78 | with get_text_file(language, text_type, 'a') as text_file:
79 | for new_content in new_data:
80 | text_file.write(u'{}\n'.format(new_content))
81 | text_file.write(u'\n')
82 |
83 |
84 | def parse_url(url, language=''):
85 | u"""
86 | Getting url, parsing it and saving the contents of it to local files.
87 | """
88 | language = get_language(language)
89 | try:
90 | soup = BeautifulSoup(urlopen(url).read())
91 |
92 | # saving paragraphs
93 | save_content(soup, 'p', 'paragraphs', url=url, language=language,
94 | min_length=150)
95 |
96 | # saving all headings
97 | for i in range(1, 7):
98 | heading_level = 'h{0}'.format(i)
99 | save_content(soup, heading_level, 'titles', url=url,
100 | language=language, min_length=20)
101 | return 'success!'
102 |
103 | except (HTTPError, URLError):
104 | return 'error getting content from url'
105 |
--------------------------------------------------------------------------------
/real_content/templatetags/drc.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import random
4 |
5 | from django import template
6 | from django.utils import six
7 |
8 | from real_content.drc_utils import get_language, get_text_file
9 | from real_content.settings import (
10 | DRC_MISSING_FILE_MSG,
11 | DRC_EMPTY_FILE_MSG,
12 | DRC_NUMBER_START,
13 | DRC_NUMBER_END
14 | )
15 |
16 | register = template.Library()
17 |
18 |
19 | def random_lines(text_file, no_of_lines=1):
20 | u"""
21 | Gets a random line from a file ignoring lines starting with # and empty
22 | lines.
23 | """
24 | if text_file is None:
25 | return DRC_MISSING_FILE_MSG
26 | lines = text_file.read().splitlines()
27 | clean_lines = [line for line in lines
28 | if line.startswith('#') is False and line.strip() != '']
29 |
30 | if clean_lines == []:
31 | return DRC_EMPTY_FILE_MSG
32 | if no_of_lines == 1:
33 | return random.choice(clean_lines)
34 | else:
35 | return random.sample(clean_lines, no_of_lines)
36 |
37 |
38 | @register.inclusion_tag('real_content/tags/drc_title.html')
39 | def drc_title(tag='h1', css_class='', language=''):
40 | u"""
41 | Retrieve random title.
42 | Uses langauge from global settings if an override is not provided.
43 | """
44 | language = get_language(language)
45 | titles = get_text_file(language, 'titles')
46 |
47 | data = {
48 | 'title': random_lines(titles, 1),
49 | }
50 |
51 | # backwards compatibility with 0.1.5 - if only heading size was sent
52 | try:
53 | tag = int(tag)
54 | if tag > 6:
55 | tag = 6
56 | tag = 'h{}'.format(tag)
57 | except ValueError:
58 | pass
59 |
60 | # make sure that only/at least one word is the tag
61 | # (important for closing tags)
62 | try:
63 | data['tag'] = tag.split()[0]
64 | except IndexError:
65 | data['tag'] = 'h1'
66 |
67 | data['css_class'] = css_class
68 | return data
69 |
70 |
71 | @register.inclusion_tag('real_content/tags/drc_paragraph.html')
72 | def drc_paragraphs(no_of_paragraphs=1, css_class='', language=''):
73 | u"""
74 | Retrieve n random paragraphs.
75 | Uses langauge from global settings if an override is not provided.
76 | """
77 | language = get_language(language)
78 | paragraphs = get_text_file(language, 'paragraphs')
79 |
80 | random_paragraphs = random_lines(paragraphs, no_of_paragraphs)
81 |
82 | # fix when returning only 1 paragraph
83 | if isinstance(random_paragraphs, six.string_types):
84 | temp_list = []
85 | temp_list.append(random_paragraphs)
86 | random_paragraphs = temp_list
87 |
88 | data = {
89 | 'paragraphs': random_paragraphs,
90 | }
91 |
92 | data['css_class'] = css_class
93 | return data
94 |
95 |
96 | @register.inclusion_tag('real_content/tags/drc_lorempixel.html')
97 | def drc_image(width=640, height=480, category='',
98 | gray=False, image_id='', css_class=''):
99 | u"""
100 | Retrieve image from lorempixel.com service.
101 | Possible categories are:
102 | abstract, animals, business, cats, city, food, nightlife, fashion,
103 | people, nature, sports, technics, transport
104 | """
105 | data = {}
106 | url = u'http://lorempixel.com/'
107 | if gray:
108 | url = '{url}g/'.format(url=url)
109 | url = '{url}{width}/{height}/'.format(url=url, width=width, height=height)
110 | if category:
111 | url = '{url}{category}/'.format(url=url, category=category)
112 |
113 | # image_id can only be defined if the category was set, otherwise we
114 | # get black image
115 | if image_id and image_id <= 10:
116 | url = '{url}{image_id}'.format(url=url, image_id=image_id)
117 | else:
118 | # use random image_id if non was set to prevent from displaying the
119 | # same image over and over again
120 | url = '{url}{image_id}'.format(
121 | url=url,
122 | image_id=random.randrange(1, 11))
123 |
124 | data['url'] = url
125 | data['css_class'] = css_class
126 | return data
127 |
128 |
129 | @register.simple_tag
130 | def drc_number(start=DRC_NUMBER_START, end=DRC_NUMBER_END):
131 | u"""
132 | Return a random number inbetween start and end limits.
133 | """
134 | try:
135 | int(start), int(end)
136 | if start <= end:
137 | return random.randint(int(start), int(end))
138 | else:
139 | return drc_number(end, start)
140 | except ValueError:
141 | return 'please provide a number as an argument'
142 |
--------------------------------------------------------------------------------
/real_content/content/es_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-11T07:30:30.012907
2 | # http://elpais.com/
3 | Rajoy comunicó a Sánchez que no excluía adelantar las elecciones
4 | Latinoamérica bordeará este año la recesión, según el Banco Mundial
5 | Nostalgia de las caravanas
6 | Las aerolíneas proponen que el equipaje de mano sea más pequeño
7 | Blasco ingresará en prisión el lunes para cumplir seis años de condena
8 | Una crisis de gestión
9 | Un millón de contribuyentes perderá con la reforma fiscal
10 | ¡En qué estaría yo pensando!
11 | El PP cierra filas para que avance la reforma de la ley del aborto
12 | El Papa crea un tribunal para los obispos que encubran la pederastia
13 | Una catáfora en el momento más duro del año
14 | Leopoldo López no acude a la vista por su “débil” estado de salud
15 | Un sector de Podemos critica la deriva hacia “un partido más”
16 | Barberá se aferra al Ayuntamiento: "Eso del último pleno, ya se verá"
17 | Tiembla, Messi: seis 'cracks' de la Copa Mundial Femenina de Fútbol
18 | La increíble y controvertida vida de la mejor portera del mundo
19 | La mitad de los países de la UE se opone a las cuotas de refugiados
20 | Ada Colau crea cuatro grandes áreas para gobernar Barcelona
21 | Adolfo Domínguez cierra su línea de ropa para niños
22 | Las FARC tensan el proceso de paz con ataques a infraestructuras
23 | “El Papa hace la revolución”
24 | La Guardia Civil detiene a tres menores por vejar a una alumna
25 | EE UU refuerza su presencia contra el Estado Islámico en Irak
26 | Tierras bañadas en sangre
27 | Las cláusulas que ahogan la economía de miles de familias
28 | Un sofisticado virus espió las reuniones nucleares sobre Irán
29 | Los deberes de verano más increíbles de la historia (esto es real)
30 | Atención, 'runners': vuestros calcetines no funcionan
31 | Las condiciones de Podemos dificultan los pactos con el PSOE
32 | Ponte a prueba y descubre si aprobarías la selectividad
33 | Un vídeo sobre la muerte digna reaviva el debate en Francia
34 | Mil millas y una leyenda
35 | Marqués de Vitoria Selección Reserva 2009
36 | Electro estimulador Eco-308
37 | Militantes del FN quemaron coches para denunciar luego inseguridad
38 | El último pleno de Ana Botella
39 | Inditex apuesta por China, Rusia y por las tiendas de bandera
40 | El PP invoca la ‘doctrina Botín’ para evitar el juicio del ‘caso Bárcenas’
41 | Morena quita al PRD la mayoría en el Congreso de la Ciudad de México
42 | Una alianza verde con Europa
43 | Xavi: “España tiene un gran equipo, sólo le falta creérselo”
44 | ‘El Brujo’ presta su alquimia a Santa Teresa en su nueva obra
45 | El ple de la llàgrima
46 | Casillas, De Gea y Keylor, juntos en León
47 | Curso de Experto en Pastelería Profesional
48 | Formidable cartel de estrellas para la Copa América
49 | Luces... cámara... ¿y el guión?
50 | La Eurocámara vota si exige la salida inmediata de Blatter
51 | Masculinidad en conserva
52 | Carolina Herrera aconseja a Kim Kardashian “taparse más”
53 | Korta, víctima de ETA y alcalde del lugar del crimen 15 años después
54 | Las mejores tarjetas para ahorrar en la cesta de la compra
55 | El director de EL PAÍS: “Hay que escuchar a los lectores”
56 | Piqué, abucheado por aficionados en León
57 | Soy de Nueva York, viví 8 meses en Extremadura y así cambió mi vida
58 | Padura: “Es un triunfo de la literatura cubana”
59 | Los actores de ‘The Big Bang theory’ crean becas para estudiar ciencias
60 | Último enredo entre el Real Madrid e Iker Casillas
61 | Diseñando 007: Cincuenta Años de Estilo Bond
62 | Yo también soy Caitlyn Jenner
63 | Dime en qué mes naciste y te diré qué es lo que te duele
64 | Sueldos de 3.829 euros al mes en Alemania
65 | Los secretos de la revolución verde de Copenhague
66 | Trabajo contrarreloj en el rodaje entre rejas de 'Vis a vis'
67 | Cómo combatir bulos: “Los inmigrantes copan la sanidad”
68 | ¿Te dará la nota para la carrera que quieres estudiar?
69 | ¿Las pizzas del DIA solo llevan ingredientes en zonas visibles?
70 | 16 casas para vivir en la playa y trabajar en la ciudad
71 | # 2015-06-11T07:35:03.600505
72 | # http://politica.elpais.com/politica/2015/06/10/actualidad/1433962736_709457.html
73 | La semana pasada, en La Moncloa, Rajoy avisó al líder del PSOE que aún no tenía fecha
74 | Nueve errores que un hombre no debe cometer en una 'app' para ligar
75 | El niño con chistera que asombró a Isabel II
76 | # 2015-06-11T07:35:15.133667
77 | # http://politica.elpais.com/politica/2015/06/10/actualidad/1433964284_566358.html
78 | Los firmantes señalan que Podemos ha dejado de ser “el único instrumento de cambio”
79 | Echenique y 22 dirigentes firman un documento titulado 'Abrimos Podemos'
80 | # 2015-06-11T07:37:22.245449
81 | # http://economia.elpais.com/economia/2015/06/10/actualidad/1433958539_848272.html
82 | Las cláusulas más resistentes
83 | Unos dos millones de hipotecas mantienen condiciones que la justicia está declarando abusivas. Los bancos defienden que son legales a priori y estudian caso a caso
84 | El proceso de reclamación
85 | La doctrina del Supremo
86 | # 2015-06-11T07:37:34.088677
87 | # http://politica.elpais.com/politica/2015/06/10/actualidad/1433956558_023160.html
88 | Los cinco diputados populares que rompieron la disciplina no han sido sancionados
89 | El Grupo Popular no prevé fugas de votos en la votación prevista para este jueves
90 |
--------------------------------------------------------------------------------
/real_content/content/en_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-05
2 | # source: http://en.wikipedia.org
3 | 2011 Lamar Hunt U.S. Open Cup Final
4 | Dallas Buyers Club is a 2013 American Biographical Film Drama
5 | Woodroof Bribes a Hospital Worker to Get Him the AZT
6 | Barkley Gets a Police Permit to Raid the Buyers Club, But Can Do Nothing But Give Woodroof a Fine
7 | The Official Soundtrack Album Was Announced on October 16, 2013, and It Was Released Digitally on October 29, 2013
8 | Dallas Buyers Club Itself Was a Breathtaking Motion Picture Driven By the Extraordinary Performances From Matthew Mcconaughey and Jared Leto.
9 | The National Hurricane Research Project (Nhrp) Was Initiated in 1955
10 | Nhrp Continued to Carry Out Research Flights Into Hurricane Donna, Hurricane Cleo, and Hurricane Betsy
11 | The Northern Xinjiang Railway or Beijiang Railway is a Railway in Xinjiang
12 | This Article is About the People's Republic of China
13 | The Qing Dynasty Was the Last Imperial Dynasty of China
14 | Borders of China and Territorial Changes of the People's Republic of China
15 | With the Temporary Passing of the Arab Threat, Constantine Turned His Attention to the Church
16 | Constantine Had Been Forced to Conclude Treaties in the West With the Lombards, Who Had Captured Brindisi and Taranto
17 | Commencing in 674, the Arabs Launched the Long-Awaited Siege of Constantinople
18 | The City Was Originally Founded as a Greek Colony Under the Name of Byzantium in the 7Th Century Bc
19 | The First Known Prefect of the City of Constantinople Was Honoratus
20 | The Importance of Constantinople Gradually Increased
21 | In the 9Th and 10th Centuries, Constantinople Had a Population of Between 500,000 and 800,000
22 | Under the Comnenian Dynasty Byzantium Staged a Remarkable Recovery
23 | Sounders FC Became the Second Expansion Club in MLS History to Win the U.S. Open Cup
24 | Fans Chose a Name for the Team in an Online Poll
25 | # 2015-06-09T11:09:11.162144
26 | # http://www.newyorker.com/news/news-desk/the-end-of-the-erdogan-era
27 | The End of the Erdogan Era?
28 | Show Trials on the Bosphorus
29 | # 2015-06-09T11:10:07.984956
30 | # http://www.bbc.com/news/world-middle-east-32831854
31 | Inside Mosul: What's life like under Islamic State?
32 | Intimidation, punishment and torture
33 | Indoctrination and surveillance
34 | Disruption of daily life
35 | IS tactics and logistics
36 | Persecution of minorities
37 | # 2015-06-09T11:15:02.461154
38 | # http://edition.cnn.com/2015/06/08/middleeast/habbaniyah-ramadi-fightback-against-isis/index.html
39 | Bullets fly on ISIS front line as Iraqis prepare for battle
40 | # 2015-06-09T11:15:02.462343
41 | # http://edition.cnn.com/2015/06/08/middleeast/habbaniyah-ramadi-fightback-against-isis/index.html
42 | 'Moron' posts selfie, gives away ISIS location
43 | ISIS targets key Iraqi military base
44 | Iraqi forces prepare to retake Ramadi from ISIS
45 | Unsupported, Sunni moderates struggle against ISIS
46 | Ramadi fell to ISIS because troops were ordered to leave, Iraq's speaker says
47 | See how the raid on ISIS unfolded
48 | The name ISIS hates to be called
49 | Iraqi officials: Iraq retakes refinery town from ISIS
50 | ISIS forces out 2 enemy armies in 1 week
51 | ISIS gains Iraqi victory, loses key commander
52 | U.S. targets ISIS headquarters using social media post
53 | ISIS using the 'dark web' as a weapon
54 | Why ISIS is winning, and how its foes can reverse that success
55 | Saudi high court upholds prison term, 1,000 lashes, blogger's sister says
56 | U.S. official: 'Reams' of ISIS data seized
57 | U.S.: Only half of Baiji in Iraqi hands
58 | Is Iraq's Air Force up to the task of battling ISIS?
59 | Who's in charge of ISIS?
60 | Mom: My son died for Ramadi; now ISIS has it
61 | Iraqi forces prepare to retake Ramadi from ISIS
62 | Why ISIS is luring so many Americans?
63 | Separatists, government forces clash in eastern Ukraine
64 | ISIS expanding its territory at an alarming rate
65 | Obama: ISIS strategy isn't failing
66 | Detained ISIS members speak from Iraqi jail
67 | U.S. releases name of ISIS commander killed in raid
68 | # 2015-06-09T11:17:17.316175
69 | # http://edition.cnn.com/2015/05/04/entertainment/feat-obit-grace-lee-whitney-star-trek/index.html
70 | Grace Lee Whitney, Yeoman Rand on 'Star Trek,' dead at 85
71 | Comedy icon Anne Meara dies at 85
72 | 7 shows that mattered in the '70s
73 | Rich Eisen's tearful tribute to Stuart Scott
74 | Philip Seymour Hoffman's memorable scenes
75 | '60 Minutes' correspondent Bob Simon dies
76 | CNN hosts test their knowledge of the 1970s
77 | Robin Williams: 9 memorable moments
78 | Ariana Grande takes down sexist double standards in a single tweet
79 | Legendary basketball coach Dean Smith dead at 83
80 | 'Beautiful Mind' mathematician John Nash, wife killed
81 | 'Parks and Rec' producer dead at 30
82 | Actress Lauren Bacall has died at 89
83 | 'American Horror Story' actor dead at 34
84 | What makes Swiss cheese? You don't have the hole story
85 | Taylor Swift 'fine' with not being 'overtly sexy'
86 | Best moments of Pugsley Addams
87 | Joan Rivers: Memorable moments
88 | 'Miller High Life' delivery guy Windell Middlebrooks dies
89 | Comedy icon Anne Meara dies at 85
90 | 'Seinfeld' actor Daniel von Bargen dies at 64
91 | Original 1976 'Star Wars' script uncovered
92 | Blues legend B.B. King dies at 89
93 |
--------------------------------------------------------------------------------
/real_content/content/cz_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-11T19:54:50.583123
2 | # http://www.novinky.cz/
3 | Přecházel na červenou, policista s ním praštil o zem. Měl na to právo
4 | Výherce 2,5 miliardy si z Prahy odvezl zatím 270 tisíc, dál chodí do práce
5 | Ministerstvo dopravy zvažuje audit kvůli odměnám v Letišti Praha
6 | Pilot Lubitz se bál, že slepne, vystřídal 41 lékařů
7 | Náklaďák ztratil sedm tun obilí v Přešticích, zasypal půl kilometru silnice
8 | V Bratislavě našli rozčtvrcené mužské tělo
9 | Jiří Borovec skončil v dozorčí radě ČEZ, míří prý do čela ERÚ
10 | Věřitelům dochází trpělivost, Řecko dostalo drsné varování
11 | Volání z dovolených nezlevní, zrušení roamingu se odkládá
12 | Šok pro Real, který myslel na Courtoise! Čech přišel o zajímavou šanci, ale má jinou
13 | # 2015-06-11T19:57:06.683425
14 | # http://www.idnes.cz/
15 | Fallout 4 či pojetí soubojů v Kingdom Come: Deliverance
16 | „Můj muž má milenku!“
17 | Zveřejněte bin Ládinovu sbírku porna, žádal CIA muž. Rozvědka to odmítla
18 | Dvořák schoval odměny do tajné výroční zprávy. Ministerstvo smlouvy nemá
19 | Nejošklivější dům si postavil architekt pro sebe. Sousedé zuří
20 | Ksicht zloděje je tajný osobní údaj!
21 | Čeští řidiči se moc „lepí“. Držte si odstup, dvě sekundy jsou málo
22 | Rekonstrukce bytu 3+1, kde se do koupelny vešla jen vana a umyvadlo
23 | Několik slov k uprchlíkům
24 | Vyšetřování smrti skokana ze Sněžky je u konce, podcenil odraz
25 | Hlavně se z toho nepodělat, říká čtenářka s rakovinou prsu a metastázami
26 | Óčko otevřelo nové studio, zpívala Farna i další hvězdy
27 | HTC se chlubí zlatým One M9. Jeho fotku ale pořídilo iPhonem
28 | Časovaná bomba nám tiká za humny
29 | Pražany zaskočila simulovaná nehoda letadla na Karlově náměstí
30 | Slavomír Lener: Uplácení trenérů v hokeji
31 | Netušila, že má vysoký přeplatek u pojišťovny. Může to být i váš případ
32 | Christopher Lee měl charizma, vzpomíná jeho dabér Pavel Rímský
33 | Zazobanec a ředitel zeměkoule? Takový Robert rozhodně nebyl, říká kamarád ubodaného podnikatele
34 | Myslíte si, že jste blbí?
35 | Vyvoláváte hysterii a odsuzujete předem, vytýká policii advokátní komora
36 | Reality: 12 minut od Prahy 6 - Nový velký dům 5+1, 127m2
37 | Zaměstnání: Vytvoř si profesionální životopis snadno a rychle!
38 | Devíti trampům se stalo něco krutého. Kholat přibližuje děsivé události
39 | Hledej pravdu, slyš pravdu - kázání v církvi
40 | Podvodné síti šéfoval člen advokátní komory, tvrdí policie. Je ve vazbě
41 | Příprava na Island? Dopoledne na velrybách, pak lázně, žertoval Vrba
42 | Majitelům bytů musí být umožněno odmítnout nájemníka nejen proto, že je Rom, paní Šabatová
43 | Agresivní suchozemská ryba vraždí zvířata v severní Austrálii
44 | I když 2,5 miliardy výherce nedaní, finančnímu úřadu neunikne
45 | Setkání rodáků u Kapličky
46 | Drží mezi ňadry limonádu. Jako kampaň proti nemoci
47 | Okamžiky, kdy měl svět namále. Od totální války nás zachránila náhoda
48 | Ruské stíhačky „pozdravily“ flotilu NATO během manévrů na Baltu
49 | Muslimští uprchlíci nejsou přínos, pane Palato
50 | Jóga není jen pro hubené, dokazuje spoře oděná tlustá jogínka
51 | Chcete, aby vám peníze vydělávaly? Investice nemusí být hazard.
52 | Boty, ve kterých zvládnete kvapík. A to klidně i vodou
53 | Policejní stát, incest není škodlivý, v muslimských zemích je bezpečno, imigranti jsou přínosem.
54 | Světoznámé Předmostí: jak unikátní pravěk pohřbily paneláky
55 | Malé kufry do šrotu? Příruční zavazadla do letadel mají být menší
56 | Auta: ŠKODA Octavia III Style 1,6 TDI
57 | DNA dinosaurů stále máme jen ve filmu. O jejich oživení se snažíme jinak
58 | Máš hezkou prdelku, slyšela vyměněná manželka, která pila jak Džambulka
59 | # 2015-06-11T19:59:03.962314
60 | # http://www.novinky.cz/krimi/372112-prechazel-na-cervenou-policista-s-nim-prastil-o-zem-mel-na-to-pravo.html
61 | Policii se přihlásil muž, který se poznal na videu zveřejněném kvůli vraždě v Újezdu
62 | Zloději šperků už sedí ve vazbě, vzali cennosti za milión
63 | Muž na Olomoucku testoval před koupí malé letadlo, zřítilo se s ním Video
64 | Výzvu musí uposlechnout
65 | # 2015-06-11T20:00:48.814079
66 | # http://zpravy.idnes.cz/american-zazadal-cia-o-jeho-zverejneni-porna-ze-sbirky-bin-ladina-pxm-/zahranicni.aspx?c=A150611_121321_zahranicni_ert
67 | Dost bylo smrádku a teploučka. Česko by mělo přijmout azylanty
68 | Zákon o svobodném přístupu k informacím
69 | Potyčka dívky s policistou v USA opět probudila rasové protesty
70 | Produktový Manažer - junior
71 | Zabíjejte, kde to jde. Náboráři Islámského státu se zaměřili na Balkán
72 | Boj Američana za Usámovo porno
73 | V USA odtajnili Usámovy dokumenty. Formulář měl i na nábor mučedníků
74 | Žena nechtěla mluvit s reportérkou, „típla“ o ni cigaretu
75 | Za velký počet Romů na zvláštních školách může i incest, tvrdí Slovensko
76 | Sazce se přihlásil výherce 2,5 miliardy. Měl trému a pospíchal na vlak
77 | # 2015-06-11T20:01:24.666747
78 | # http://cestovani.idnes.cz/prirucni-zavazadla-se-zmensi-djz-/kolem-sveta.aspx?c=A150611_104418_kolem-sveta_tom
79 | Nacpěte malý kufr na 10 dní a neplaťte aerolinkám
80 | Úspora času, paliva i lobby výrobců kufrů...
81 | Dovolená v Česku, Moravskoslezský kraj
82 | Pláže až na obzor. To je Costa de la Luz, které Čechům uniká
83 | Jak spí v letadle prezidenti. Luxusní ložnice v Boeingu 747-8
84 | Jízda po cyklostezce bývá horor. Hledáme pravidla
85 | Pracuju v jednom z nejhezčích míst USA, vypráví student z Olomouce
86 | Toto jsou nejkratší lety světa. Některé trvají jen dvě minuty
87 | Boeing zmenší toalety. Na palubu nacpe dalších 14 sedadel
88 | Konec tlačenice? Airbus plánuje dvojité dveře uprostřed letadla
89 | Nechtěl platit tisíce za opravu chyby na letence, tak si změnil jméno
90 | Na Jadran opět vyrazí statisíce Čechů. Která cesta je nejlepší?
91 | # 2015-06-11T20:04:04.642263
92 | # http://www.novinky.cz/ekonomika/371951-volani-z-dovolenych-nezlevni-zruseni-roamingu-se-odklada.html
93 | Sobotka podepsal dohodu o čerpání 644 miliard z operačních programů EU
94 | EasyJet kontroluje letadla pomocí dronů, chce tisknout díly ve 3D
95 | Rušení roamingu se zatím nekoná
96 |
--------------------------------------------------------------------------------
/real_content/content/gr_paragraphs.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-14T12:57:29.140262
2 | # http://www.makeleio.gr/?p=369061
3 | Ο Μαρκαριάν από την πρώτη στιγμή που τον προσλάβανε, έλεγα δημοσίως ότι ήταν λάθος που φέρανε τον …παππού και ότι του έλειπε μόνο η μαγκούρα! Το στιλ του, η ηλικία του, το πάχος του, δεν ξέρω αν είμαστε στην ίδια ηλικία, εγώ όμως κάνω 5 χιλιόμετρα τη μέρα και είμαι σκύλος, αυτός δείχνει σαν να μην μπορεί να περπατήσει. Δεν έχει κουράγιο ούτε να μιλήσει!
4 | Πάντα είχαμε καλούς παίκτες στην Εθνική ακόμα και όταν δεν πήγαινε καλά η ομάδα. Τέτοια ξεφτίλα σαν και αυτή ποτέ. Νησιά Φερόε είναι ένα κρατιδιάκι με 50.000 κόσμο, δεν γεμίζουν ούτε το ΟΑΚΑ! Ερασιτέχνες ποδοσφαιριστές. Μας νίκησαν δύο φορές. Δικαίως είμαστε τελευταίοι.
5 | Διαβάστε τι έγραψαν τα διεθνή ΜΜΕ για την ντροπιαστική ήττα της Εθνικής. Κάποια από τα ξένα μέσα δεν παρέλειψαν να βάλουν και μια δόση ειρωνείας… περισσότερα…
6 | Παρουσιάζεις δύο χαφ που δεν ξέρουν μπάλα. Αφήστε με ρε με τον Σάμαρη, εγώ τα έλεγα όταν τον υμνούσαν, δεν υπάρχει κόφτης Σάμαρης, μαζί με τον Κονέ είναι μια τραγωδία. Σε κάνουν να αναπολείς τον Μανιάτη. Αναγκαζόταν ο Μήτρογλου να γυρνάει στη σέντρα, τι να κάνει ο Μήτρογλου τόσο πίσω ένας Θεός ξέρει. Όποτε έβγαιναν οι άλλοι μπροστά, έβγαιναν μόνοι τους, κόφτες δεν υπήρχανε.
7 | Αλλαγές ο Νίνης, ο Κολοβός και ο Φούντας! Σοβαρά μιλάτε; Πού την καταντήσατε την Εθνική; Να παίζει δέκα ματς στον Πανιώνιο ο Φούντας και να παίζει Εθνική; Τι φούντα μου λέτε και κλωστές!
8 | Περνάει περίοδο δραματική ο Μήτρογλου, όσο μεγαλώνει, έχει διαλύσει. Πολύ καλά κάνει και τον αφήνει ο Ολυμπιακός, πήγαινε αγόρι μου να παίξεις στη …Μικτή Κόσμου.
9 | Αυτή η Εθνική ομάδα είναι η χειρότερη που έχει βγάλει το ελληνικό ποδόσφαιρο από την εποχή ακόμα που έπαιζαν μπάλα με τα …τσαρούχια! Στο 2-0 από τα Νησιά Φερόε σιχάθηκα και γύρισα κανάλι.
10 | Ο Σταφυλίδης είναι ένας παικτάκος μέτριος, με ύψος 1,15, πλακώνει τις σέντρες επειδή δεν μπορεί να διεισδύσει, πού είσαι ρε Χολέμπας που είσαι και ψηλό παλικάρι. Ο Σταφυλίδης μου θύμισε τον Γεωργάτο στα τελευταία του όταν πλάκωνε τις σέντρες επειδή είχε γεράσει.
11 | Ο δε Φετφατζίδης δεν είχε δουλειά να παίζει έξω δεξιά, έχει μείνει στάσιμος, χαράμισε το ταλέντο του, ούτε ταχύτητα, ούτε δύναμη, ούτε σουτ, είναι και πολύ κοντός.
12 | Ο Νίκος Αλέφαντος πέρασε από “κόσκινο” τους παίκτες της Εθνικής για την άθλια εμφάνιση και την διπλή πανωλεθρία από…τους “ψαράδες” των Νησιών Φερόε. Δείτε πως σχολίασε σε αθλητική ιστοσελίδα:
13 | # 2015-06-14T12:58:22.675435
14 | # http://www.makeleio.gr/?p=368901
15 | Δυστυχώς, ένας γαμπρός ήπιε αρκετά παραπάνω από ότι έπρεπε και, το βίντεο που κάνει τον γύρο του Διαδικτύου, θα το θυμίζει σε εκείνον και τη γυναίκα του για πάντα.
16 | Αρχικά, λοιπόν, μπροστά σε όλους τους παρευρισκόμενους, έδωσε μια χορευτική παράσταση για τη γυναίκα του- κι ας μην μπορούσε καλά-καλά να κουνηθεί. Όταν την πλησίασε, μάλιστα, για να κάνει αυτό που θα ονόμαζε κανείς ως ένα ιδιότυπο lap dance, το μόνο που κατάφερε, αφού έκατσε στα πόδια της γυναίκας του, ήταν να γλιστρήσει στο πάτωμα.
17 | Στη συνέχεια, άρχισε να «παίζει» με το πόδι της νεονύμφου, να προσπαθεί να της αφαιρέσει τα ρούχα με το στόμα του και να δαγκώνει την ίδια. Η ίδια κατάφερε να μείνει ψύχραιμη και να περιμένει υπομονετικά τον πλέον άνδρα της, καταλήγοντας στο τέλος στο να δέχεται την παρηγοριά της οικογένειας της, ενώ άλλοι φίλοι απομάκρυναν τον ίδιο, προκειμένου να ξεμεθύσει.
18 | # 2015-06-14T12:58:37.246566
19 | # http://www.makeleio.gr/?p=369130
20 | ESPN: «Για δεύτερη φορά, τα Νησιά Φερόε νίκησαν την Ελλάδα στα προκριματικά. Πέτυχαν ακόμα μια νίκη που θα είναι αξιομνημόνευτη, επίκρατώντας 2-1. Οι νίκες που μετρούσαν μέχρι στιγμής τα Νησιά Φερόε ήταν κόντρα σε ομάδες δυναμικότητας όπως το Σαν Μαρίνο ή το Γιβραλτάρ και γι’ αυτό αποκτά ακόμα μεγαλύτερη σημασία η νίκη επί της Ελλάδας, αφού βρίσκεται σε τοπ ανταγωνιστικό επίπεδο».
21 | FoxSports: «Η Ελλάδα έμεινε στον… τόπο και πάλι από ομάδα μικρότερης δυναμικότητας. Τα Νησιά Φερόε πέτυχαν ακόμα μια νίκη – έκπληξη επί των Πρωταθλητών Ευρώπης του 2004. Η ήττα αυτή για την Ελλάδα έρχεται τη στιγμή που η Κυβέρνηση της χώρας βρίσκεται υπό ασφυκτική πίεση από τους δανειστές και υπάρχουν φόβοι χρεοκοπίας».
22 | Guardian: «Τα Νησιά Φερόε εξευτέλισαν την Ελλάδα με δεύτερη νίκη εις βάρος της στα προκριματικά του Euro 2016. Όταν ο Λαρς Όλσεν είχε τονίσει ότι η νίκη της ομάδας του πριν από μερικούς μήνες ήταν κάτι “ηχηρό” σε όλο τον κόσμο, δύσκολα θα μπορούσε να φανταστεί ότι αυτό θα επαναλαμβανόταν».
23 | Διαβάστε τι έγραψαν τα διεθνή ΜΜΕ για την ντροπιαστική ήττα της Εθνικής. Κάποια από τα ξένα μέσα δεν παρέλειψαν να βάλουν και μια δόση ειρωνείας… για την οικονομική κατάσταση της χώρας:
24 | # 2015-06-14T12:58:47.803185
25 | # http://www.makeleio.gr/?p=369110
26 | Οι πρώτες 2-3 μέρες της εβδομάδας θα είναι σε συνθήκες έντονης ζέστης ενώ η Πέμπτη και η Παρασκευή θα είναι το άκρως αντίθετο με βροχές καταιγίδες και εντυπωσιακή πτώση της θερμοκρασίας για τα δεδομένα της εποχής αλλά και ενίσχυση των ανέμων.
27 | Το καλοκαίρι ενδέχεται να υπάρχει μια πιο καλή προγνωσιμότητα όσον αφορά τις θερμοκρασίες κυρίως στις 7-10 μέρες αλλά και πάλι δεν είναι αρκετά αξιόπιστη.
28 | Επιδείνωση θα παρουσιάσει ο καιρός την Πέμπτη με μπόρες και καταιγίδες τις μεσημβρινές και απογευματινές ώρες στις περισσότερες περιοχές της χώρας ενώ την Παρασκευή και πάλι σε κάποιες περιοχές το μεσημέρι και το απόγευμα θα σημειωθούν μπόρες και καταιγίδες.
29 | “Πως θα είναι το φετινό καλοκαίρι;”. Αυτό αναρωτιέται πολύς κόσμος: Θα είναι θερμό, ψυχρό ή φυσιολογικό; Μια ερώτηση που όλοι οι Έλληνες… συζητάνε καθώς ο καιρός είναι μέρος της καθημερινής μας ζωής.
30 | Κάπου εδώ τελειώνουν προς το παρόν οι συννεφιές, οι βροχές και οι καταιγίδες και ξυπνάει το ελληνικό καλοκαίρι από σήμερα, αλλά και τις πρώτες δύο μέρες της εβδομάδας με την θερμοκρασία να εκτοξεύεται σε υψηλά για την εποχή επίπεδα.
31 | Το πιο δύσκολο κομμάτι αυτήν την εποχή είναι η πρόβλεψη των μεσημεριανών-απογευματινών καταιγίδων που είναι αρκετά τοπικές δηλαδή σε μια περιοχή γίνεται κατακλυσμός και λίγα μέτρα πιο δίπλα δεν έχει πέσει σταγόνα.
32 | Με καλό καιρό θα ξεκινήσει η νέα εβδομάδα και αρκετή ζέστη καθώς η θερμοκρασία θα ανέβει αρκετά κυρίως την Δευτέρα και την Τρίτη όπου σε αρκετές περιοχές θα ξεπεράσει και τους 35-36οC. Η Τρίτη δείχνει να είναι η πιο ζεστή ημέρα της εβδομάδας γιατί από την Τετάρτη και κυρίως την Πέμπτη η θερμοκρασία θα αρχίσει να πέφτει και οι άνεμοι στα πελάγη θα ενισχυθούν.
33 | Το έντονο κύμα ζέστης όμως δεν θα κρατήσει πολύ γιατί από την ερχόμενη Τετάρτη ο”χειμώνας” επιστρέφει και αναφέρουμε την λέξη “χειμώνας” γιατί η πτώση της θερμοκρασίας θα είναι δραματική της τάξεως των 10-12οC.
34 |
--------------------------------------------------------------------------------
/real_content/content/ru_titles.txt:
--------------------------------------------------------------------------------
1 | # 2015-06-11T07:41:08.932853
2 | # http://lenta.ru/
3 | Хакеры сообщили о планах литовской армии аннексировать Калининград
4 | «Блуд, разврат и незнамо что»
5 | Пионер кинетического искусства
6 | Почему детей с синдромом Дауна выгнали из лагеря
7 | Цены в России перестали расти
8 | Российский боец Шлеменко отверг обвинения в применении допинга
9 | В Москве задержали авторитетов Марата и Ираклия Сухумских
10 | Гэндальфа и Дамблдора «поженили» ради геев
11 | «Возвращение политинформации вызвано самой жизнью»
12 | Россияне стали первыми в общем зачете ЧЕ по фехтованию в олимпийских дисциплинах
13 | Бывший министр инвестиций Сахалина задержана по подозрению в коррупции
14 | Массовое отравление в Северной Осетии произошло из-за халатности коммунальщиков
15 | В Зальцбурге бордель предложил бесплатные услуги в знак протеста
16 | Сергей Иванов призвал отбросить сомнения по месту проведения ЧМ-2018
17 | «Среди амазонских крокодилов, в платье со стразами»
18 | Сын Джемилева приговорен к 5,5 годам заключения
19 | В сети появилось сообщество «шаурмы и красивых девушек»
20 | Католические СМИ сообщили о часовом опоздании Путина на встречу с Папой Римским
21 | Членов ОПГ задержали в центре Москвы после погони и перестрелки
22 | СМИ узнали о секретном плане ФИФА по переносу ЧМ-2018 в Катар
23 | Музей восковых фигур увековечит Ким Кардашьян в процессе селфи
24 | За хищение денег космодрома Восточный арестован глава хабаровской думы
25 | Месси предстанет перед судом за уклонение от уплаты налогов
26 | Apple заподозрили в сговоре с музыкальной элитой
27 | Строители «Зенит-Арены» забрызгали краской сотню автомобилей
28 | Митрополит освятит Нижний Новгород с аэростата
29 | В Малайзии четырех иностранцев арестовали за обнажение на священной горе
30 | Улюкаев предложил создать структуру контроля над естественными монополиями
31 | Левой, правой, ультраправой
32 | Правительство займется интернет-выборами в сборную России по футболу
33 | Дикие шимпанзе оказались любителями вина
34 | Продлить нельзя ужесточить
35 | Сайт Кремля лишил Николая Цуканова статуса врио
36 | Выходные в стране: День России, средневековые сказки и фристайл
37 | Путин посмотрел в Италии на бар в виде самогонного аппарата и оценил роль G7
38 | Назван самый популярный цвет в мире
39 | Кино недели: динозавры против генетики, дуры против преступности
40 | СПЧ призвал воссоздать комиссию по помилованию при президенте
41 | ДНР и ЛНР отозвали поправки в конституцию с украинским Крымом
42 | Итальянские друзья Путина
43 | Асимметрию времени проверят при помощи изотопов радия
44 | «Россия — не та страна, которую можно изолировать»
45 | В Южной Корее полиция арестовала восемь человек за распространение слухов о MERS
46 | Samsung показала прозрачные и зеркальные дисплеи
47 | Обама одобрил отправку 450 военных в Ирак
48 | США вернули себе мировое лидерство по добыче нефти
49 | Сын Ротенберга соберет плату с грузовиков при помощи «Платона»
50 | Тайная жизнь Серенгети
51 | «Яблоко» выдвинет Явлинского в президенты России
52 | Парк Горького выпустил собственные духи
53 | США призвали Ватикан быть с Россией построже
54 | Удаленный яичник девушки помог ей стать матерью спустя десять лет
55 | Инженеры создали компьютерный процессор из воды
56 | Станция Dawn сделала рекордно четкие снимки таинственных пятен на Церере
57 | Названа дата возможного возвращения Карауловой в Россию
58 | Грибаускайте назвала невозможным переселение всех африканцев в Европу
59 | «Россия хочет получить эквивалент Ялтинского соглашения»
60 | В США приостановили решение об освобождении отсидевшего 43 года в тюрьме
61 | СМИ сообщили о сопровождении фрегата с канадским премьером кораблями Балтфлота
62 | В Норвегии судья выгнал с поля футболиста-гомофоба
63 | Чемпион мира по тайскому боксу стал боевиком «Исламского государства»
64 | Rolls-Royce и немецкая Liebherr создадут новый авиадвигатель
65 | Власти Новгородской области рассказали о госдолге в 14 миллиардов рублей
66 | Азербайджанскую телеведущую отстранили от эфира из-за критики хиджабов
67 | Три польских министра и спикер парламента ушли в отставку из-за скандала с прослушкой
68 | Spotify стал самым дорогим музыкальным стартапом в мире
69 | Рукопись продолжения «50 оттенков серого» украли до публикации
70 | Пенсионерка баба Нюра объяснила свой наркобизнес поиском новых впечатлений
71 | Варвару Караулову доставят в полицию после прибытия на родину
72 | «Лаборатория Касперского» заявила о масштабной атаке на свою сеть
73 | В Европе задержали банду хакеров из Нигерии и Камеруна
74 | ОНФ составит черный список игнорирующих запросы СМИ чиновников
75 | Европарламент посоветовал ЕС отказаться от стратегического партнерства с Россией
76 | # 2015-06-11T07:43:57.732182
77 | # http://lenta.ru/articles/2015/06/11/krymm/
78 | Пляжи строгого режима
79 | Жители Крыма борются за доступ к морю
80 | Россияне отказались воспринимать советы Ростуризма всерьез
81 | В ходе поисков вице-губернатора ХМАО нашли двух утопленников
82 | В лагере под Саратовом отравились 34 школьника
83 | Аксенов объяснил использованную ДНР и ЛНР формулировку о принадлежности Крыма
84 | Задержанную студентку МГУ вывезли из миграционного лагеря в Турции
85 | Кремль рассказал о планах расширения связей с Италией в обход санкций
86 | # 2015-06-11T07:44:27.703335
87 | # http://lenta.ru/news/2015/06/10/skandalpolska/
88 | Байден пригрозил усилить давление на Россию со стороны США и стран G7
89 | Европарламент предложит Блаттеру немедленно оставить пост
90 | Обама продлил санкции против Белоруссии еще на год
91 | Австралийская разведка узнала о планах ИГ создать «грязную бомбу»
92 | Глава Минфина США обсудил с Яценюком новые санкции против России
93 | Индийская армия ликвидировала более сотни боевиков в Мьянме
94 | # 2015-06-11T07:44:49.463825
95 | # http://lenta.ru/news/2015/06/11/edm/
96 | Волков заподозрили в приручении обезьян
97 | Планетологи предложили способ добычи воды на Луне
98 | Белые медведи научились ловить дельфинов и запасать их мясо под снегом
99 | Нобелевский лауреат уволился после откровений о чувствах к коллегам-женщинам
100 | Российского боевого андроида научат бегать к концу года
101 | В горящую избу войдет
102 | # 2015-06-11T07:46:28.975012
103 | # http://lenta.ru/articles/2015/06/10/dimashq/
104 | О тушении пожара бензином
105 | Какой может быть война России против «Исламского государства»
106 | Страна была прекрасная, рейтинг был ужасный
107 | Мосгорсуд продлил летчице Савченко срок содержания под стражей
108 | Россия испытала ракету системы ПРО на казахстанском полигоне
109 | «Будут представлены все новинки, в том числе — роботизированные комплексы»
110 | Двум участникам банды Басаева предъявлено обвинение в нападении на Буденновск
111 | Жертвой аварии бомбардировщика Ту-95МС стал один член экипажа
112 |
--------------------------------------------------------------------------------
/real_content/content/rs_titles.txt:
--------------------------------------------------------------------------------
1 |
2 | # 2015-06-16T07:47:46.272662
3 | # http://www.b92.net/
4 | Kada maca spava sa pilićima
5 | Test: Michelin CrossClimate - guma za sva godišnja doba
6 | Nakon 15 godina Milan Kundera objavio novi roman
7 | Odavno nismo videli zgodniju slavnu mamu
8 | Poruka koju je jedan vozač ostavio drugom oduševila region
9 | Letujte u Srbiji - noć u "Jezeru" 6.000 RSD
10 | Tehnike koje će vam pomoći da smirite hiperaktivnog psa
11 | Kako da tragedija poput Tiajnine bude sve manje
12 | "Rezolucija o Srebrenici korak do udara na Srbiju"
13 | Deset zanimljivosti koje verovatno niste znali o Rusiji
14 | Google dodao 'Free App Of The Week' u Play Store
15 | Greškom se našao na pokeraškom turniru i osvojio 80.000 dolara
16 | Reakcije ljubitelja "Igre prestola" na "najšokantniju" epizodu
17 | Kojim mirisima mačke ne mogu da odole?
18 | Crvena zvezda na korak do titule!
19 | Robot iz "Ratova zvezda" kao dostavljač pića
20 | [84] Zvuk sa probe grupe Smak
21 | Kada "odrastao" čovek skače s dečjeg tobogana
22 | Huawei Honor 7 stiže 30. juna
23 | Ukrali joj auto pred policijom
24 | Končita dolazi u Srbiju? Bojana Stamenov najavila saradnju
25 | Mercedesova letnja servisna akcija
26 | Mercedes GLC za petinu štedljivi od prethodnika
27 | Kod "Jugoslavije" niču dve kule od 140m
28 | Hrvatima blokada bez objašnjenja i žalbe
29 | Američki Kolt ide u stečaj da preživi
30 | Srpska blogerka fotografijama s odmora zapalila društvene mreže
31 | Da li vam javni prevoz uništava zdravlje?
32 | Nova Astra u Nemačkoj košta skoro 18.000 evra
33 | Negativne strane konkurisanja na svaki oglas
34 | Infekcije se brzo šire, a sve teže se leče
35 | Igrale se PsihoDelije...
36 | Obroke merite na šoljicu
37 | „Društvo i mediji snose odgovornost za nagađanja“
38 | Leči sve: On bioenergijom rešava probleme
39 | Novi Doom stiže na proleće sledeće godine
40 | Terzić: Želimo Antonova, ali pre Rodića
41 | 24 minuta sa Zoranom Kesićem
42 | Muškarci poručuju: Ovih 10 stvari želimo u krevetu
43 | Kada „ovce broji“ pametni jastuk
44 | Volkswagen Passat B8 2.0 TDI Comfortline
45 | Osmaci polagali test iz srpskog jezika
46 | Šta sve "izluđuje" žene?
47 | Grčka kriza nokautirala berze i EUR
48 | Koliko puta nedeljno treba vežbati?
49 | Problemi u Majdanpeku: Roditelji besni, a Ministarstvo obrazovanja ne odgovara
50 | Vujošević poslao kapitena u svlačionicu
51 | Tiroida: Proverite hormonski status na pet godina
52 | Lido di Jezolo - evropski Majami u komšiluku
53 | Galerija: Toyota Avensis - novi dizajn i motori
54 | Evo zašto su se mladići u Novom Sadu "sunčali" na ulici
55 | Rusija osniva Specijalni sud za zločine OVK?
56 | Prins i Stivi Vonder održali privatni koncert za Obamu
57 | Ferrari 458 Spec. vs Tesla S P85D: Na koga se kladite?
58 | Završni koncert Kamernog ciklusa BG filharmonije
59 | 65m² 95.500€, Beograd, Zvezdara, Lipov lad, Gvozdićeva
60 | Šta se događa s masnim tkivom nakon gubitka kilograma?
61 | 56m² 59.000€, Beograd, Novi Beograd, Naselje Dr. Ivana Ribara, Dr Ivana Ribara
62 | Kreativnost povećava rizik razvoja mentalnih bolesti?
63 | Suknja cvetnog printa i jednostavna pamučna majica
64 | EU priznala: SAD gas nije alternativa
65 | Ljubitelji "Igre prestola" besni zbog "spojlera"
66 | Naš dinar ne reaguje na grčku krizu
67 | Kome je više stresan polazak u prvi razred? Roditeljima ili deci?
68 | Da li se "ol inkluziv" letovanje isplati?
69 | Belgija podigla tužbu protiv Facebooka
70 | Orić nepremostiva prepreka Beograda i Sarajeva
71 | Otmice nije bilo, priznao Stefanov brat
72 | Održana akcija udomljavanja pasa u Zemunu
73 | Novi Renault Alpine za 60. godišnjicu brenda
74 | Varnice između "ćirilične" i "latinične" štampe
75 | Fotografije zbog kojih ćete poželeti da odete u Japan
76 | Zbog Nasera Orića traži odlaganje posete Nikolića
77 | Pesniku Džejmsu Fentonu nagrada PEN Pinter
78 | Fotografski "Projekat crnog psa"
79 | I Crnogorci siti, beže sa svojih plaža
80 | Nema više ni levice ni desnice
81 | Nepal ponovo poziva turiste
82 | Psorijaza: Iz ishrane treba izbaciti masno, začine i slatko
83 | Bono s kanadskim premijerom o pomoći Africi
84 | Instagram vas vodi na put oko sveta
85 | Slovenačka predstava o glumici Nori Gregor u JDP-u
86 | Nadal: Sada igram mnogo opuštenije
87 | Ako išta mrze kod žena, to su ovih pet stvari: Kada muškarac prestaje da voli
88 | Kako na najlakši mogući način otčepiti lavabo?
89 | Džordž Majkl na lečenju od zavisnosti od marihuane
90 | Novi singl za VIS Limunadu
91 | Dva moćna uređaja u istom elegantnom dizajnu
92 | Crnogorci se nadaju uspešnoj turističkoj sezoni
93 | Žena koja je htela da prevesla Pacifik odustala od putovanja
94 | Bravo, Vlado: Georgiev organizuje koncert za izlečenje Isidore Bjelice
95 | Rešite se komaraca za 10 minuta
96 | Posle ovog video-klipa više nikada nećete okusiti banane
97 | Osveženje u čaši: "Smoothie" od banane i jabuke
98 | Pitbul skočio više od 4,5 metara uvis
99 | # 2015-06-16T07:49:58.215015
100 | # http://www.b92.net/sport/tenis/vesti.php?yyyy=2015&mm=06&dd=16&nav_id=1004742
101 | Konjuh: Notingem zauvek u srcu
102 | Nadal: Titula važna za moj mentalitet
103 | Birmingem: Krunićeva u glavnom žrebu
104 | Mau ponovo iz kvalifikacija do trofeja
105 | Slovačka: Vajda ubedljiv protiv Đokovića!
106 | Troicki dobar, Nadalu trofej u Štutgartu
107 | Ana Konjuh osvojila Notingem
108 | Tužni, mračni dani... Delpo opet na operaciji
109 | ATP: Novak "beži", Viktor 25.
110 | Ana: Krajnji cilj je Singapur
111 | Viktor do Londona Rafinim avionom
112 | Prva titula za Kamilu u karijeri
113 | Hale: Kolšrajber ispustio Federera
114 | Bojana brzo izgubila na startu
115 | Đorđević: Nema više skrivanja, idemo do finala!
116 | Božović: Zvezda mora da gleda sebe
117 | Stevan Živković pred borbu za titulu prvaka Evrope
118 | SAD: Rusija najveća pretnja, možda pošaljemo F-22
119 | # 2015-06-16T07:50:16.619736
120 | # http://www.b92.net/biz/vesti/srbija.php?yyyy=2015&mm=06&dd=15&nav_id=1004596
121 | Niko ne zna koliko Srba radi van zemlje
122 | Za PKB se "bore" Arapi, Rusi i Kinezi
123 | Mesečno smo "kratki" za 1.500 RSD
124 | "Izdavanje dozvola palo sa 90 na 15 dana"
125 | U Vladi bez dogovora sa malinarima
126 | Stigli radnici i mašine - autoput kreće
127 | 5.500 ha u Srbiji čeka konverziju
128 | # 2015-06-16T07:51:02.975547
129 | # http://www.b92.net/biz/vesti/svet.php?yyyy=2015&mm=06&dd=15&nav_id=1004533
130 | Franak i dalje jak, "jede" radna mesta
131 | "Polažem velike nade u proboj 'rafala'"
132 | Ruski car palačinki osvaja Menhetn
133 | Slabiji USD pomogao skok nafte
134 | Supervoz krenuo, juri do 400 km na sat
135 | # 2015-06-16T07:51:15.491634
136 | # http://www.b92.net/biz/vesti/svet.php?yyyy=2015&mm=06&dd=16&nav_id=1004748
137 | Neverovatan tempo tražnje nafte
138 | Za Hrvate nema zime, struja im jeftinija
139 | Nafta zbog Grčke pala ispod 60 USD
140 | # 2015-06-16T07:51:31.810325
141 | # http://www.b92.net/biz/vesti/region.php?yyyy=2015&mm=06&dd=15&nav_id=1004451
142 | Slovencima "čaša dopola prazna"
143 | Region složan - udaraju na sivu ekonomiju
144 | CG: Za kafiće koliko i za obrazovanje
145 | "CG ima svoju snagu, sakupiće sezonce"
146 | BiH: Javna preduzeća ne mare, dele posao
147 |
--------------------------------------------------------------------------------
/docs/Makefile:
--------------------------------------------------------------------------------
1 | # Makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line.
5 | SPHINXOPTS =
6 | SPHINXBUILD = sphinx-build
7 | PAPER =
8 | BUILDDIR = _build
9 |
10 | # User-friendly check for sphinx-build
11 | ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
12 | $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
13 | endif
14 |
15 | # Internal variables.
16 | PAPEROPT_a4 = -D latex_paper_size=a4
17 | PAPEROPT_letter = -D latex_paper_size=letter
18 | ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
19 | # the i18n builder cannot share the environment and doctrees with the others
20 | I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
21 |
22 | .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
23 |
24 | help:
25 | @echo "Please use \`make ' where is one of"
26 | @echo " html to make standalone HTML files"
27 | @echo " dirhtml to make HTML files named index.html in directories"
28 | @echo " singlehtml to make a single large HTML file"
29 | @echo " pickle to make pickle files"
30 | @echo " json to make JSON files"
31 | @echo " htmlhelp to make HTML files and a HTML help project"
32 | @echo " qthelp to make HTML files and a qthelp project"
33 | @echo " applehelp to make an Apple Help Book"
34 | @echo " devhelp to make HTML files and a Devhelp project"
35 | @echo " epub to make an epub"
36 | @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
37 | @echo " latexpdf to make LaTeX files and run them through pdflatex"
38 | @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
39 | @echo " text to make text files"
40 | @echo " man to make manual pages"
41 | @echo " texinfo to make Texinfo files"
42 | @echo " info to make Texinfo files and run them through makeinfo"
43 | @echo " gettext to make PO message catalogs"
44 | @echo " changes to make an overview of all changed/added/deprecated items"
45 | @echo " xml to make Docutils-native XML files"
46 | @echo " pseudoxml to make pseudoxml-XML files for display purposes"
47 | @echo " linkcheck to check all external links for integrity"
48 | @echo " doctest to run all doctests embedded in the documentation (if enabled)"
49 | @echo " coverage to run coverage check of the documentation (if enabled)"
50 |
51 | clean:
52 | rm -rf $(BUILDDIR)/*
53 |
54 | html:
55 | $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
56 | @echo
57 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
58 |
59 | dirhtml:
60 | $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
61 | @echo
62 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
63 |
64 | singlehtml:
65 | $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
66 | @echo
67 | @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
68 |
69 | pickle:
70 | $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
71 | @echo
72 | @echo "Build finished; now you can process the pickle files."
73 |
74 | json:
75 | $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
76 | @echo
77 | @echo "Build finished; now you can process the JSON files."
78 |
79 | htmlhelp:
80 | $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
81 | @echo
82 | @echo "Build finished; now you can run HTML Help Workshop with the" \
83 | ".hhp project file in $(BUILDDIR)/htmlhelp."
84 |
85 | qthelp:
86 | $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
87 | @echo
88 | @echo "Build finished; now you can run "qcollectiongenerator" with the" \
89 | ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
90 | @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/django-real-content.qhcp"
91 | @echo "To view the help file:"
92 | @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/django-real-content.qhc"
93 |
94 | applehelp:
95 | $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
96 | @echo
97 | @echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
98 | @echo "N.B. You won't be able to view it unless you put it in" \
99 | "~/Library/Documentation/Help or install it in your application" \
100 | "bundle."
101 |
102 | devhelp:
103 | $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
104 | @echo
105 | @echo "Build finished."
106 | @echo "To view the help file:"
107 | @echo "# mkdir -p $$HOME/.local/share/devhelp/django-real-content"
108 | @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/django-real-content"
109 | @echo "# devhelp"
110 |
111 | epub:
112 | $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
113 | @echo
114 | @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
115 |
116 | latex:
117 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
118 | @echo
119 | @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
120 | @echo "Run \`make' in that directory to run these through (pdf)latex" \
121 | "(use \`make latexpdf' here to do that automatically)."
122 |
123 | latexpdf:
124 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
125 | @echo "Running LaTeX files through pdflatex..."
126 | $(MAKE) -C $(BUILDDIR)/latex all-pdf
127 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
128 |
129 | latexpdfja:
130 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
131 | @echo "Running LaTeX files through platex and dvipdfmx..."
132 | $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
133 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
134 |
135 | text:
136 | $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
137 | @echo
138 | @echo "Build finished. The text files are in $(BUILDDIR)/text."
139 |
140 | man:
141 | $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
142 | @echo
143 | @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
144 |
145 | texinfo:
146 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
147 | @echo
148 | @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
149 | @echo "Run \`make' in that directory to run these through makeinfo" \
150 | "(use \`make info' here to do that automatically)."
151 |
152 | info:
153 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
154 | @echo "Running Texinfo files through makeinfo..."
155 | make -C $(BUILDDIR)/texinfo info
156 | @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
157 |
158 | gettext:
159 | $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
160 | @echo
161 | @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
162 |
163 | changes:
164 | $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
165 | @echo
166 | @echo "The overview file is in $(BUILDDIR)/changes."
167 |
168 | linkcheck:
169 | $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
170 | @echo
171 | @echo "Link check complete; look for any errors in the above output " \
172 | "or in $(BUILDDIR)/linkcheck/output.txt."
173 |
174 | doctest:
175 | $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
176 | @echo "Testing of doctests in the sources finished, look at the " \
177 | "results in $(BUILDDIR)/doctest/output.txt."
178 |
179 | coverage:
180 | $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
181 | @echo "Testing of coverage in the sources finished, look at the " \
182 | "results in $(BUILDDIR)/coverage/python.txt."
183 |
184 | xml:
185 | $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
186 | @echo
187 | @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
188 |
189 | pseudoxml:
190 | $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
191 | @echo
192 | @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
193 |
--------------------------------------------------------------------------------
/real_content/tests.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | from django.template import Template, Context
4 | from django.test import TestCase
5 |
6 | from bs4 import BeautifulSoup
7 |
8 | from real_content.drc_utils import (
9 | get_language,
10 | get_text_file,
11 | save_content,
12 | parse_url
13 | )
14 | from real_content.settings import (
15 | DRC_MISSING_FILE_MSG,
16 | DRC_EMPTY_FILE_MSG,
17 | DRC_LANGUAGE
18 | )
19 |
20 |
21 | class TitleTagTest(TestCase):
22 | def test_title_shows_up(self):
23 | template = Template('{% load drc %} {% drc_title 2 %}')
24 | rendered = template.render(Context({}))
25 | soup = BeautifulSoup(rendered, 'html.parser')
26 | h2_tag = soup.find('h2')
27 |
28 | self.assertTrue(h2_tag, 'title tag missing')
29 | self.assertFalse(DRC_MISSING_FILE_MSG in str(h2_tag),
30 | 'language file missing')
31 | self.assertFalse(DRC_EMPTY_FILE_MSG in str(h2_tag),
32 | 'language file empty')
33 | self.assertFalse(h2_tag.is_empty_element, 'title tag is empty')
34 |
35 | def test_title_multiple_words_in_param(self):
36 | template = Template('{% load drc %} {% drc_title "h3 data-arg" %}')
37 | rendered = template.render(Context({}))
38 | soup = BeautifulSoup(rendered, 'html.parser')
39 | h3_tag = soup.find('h3')
40 |
41 | self.assertFalse(h3_tag.has_attr('data-arg'))
42 |
43 | def test_title_empty_param(self):
44 | template = Template('{% load drc %} {% drc_title "" %}')
45 | rendered = template.render(Context({}))
46 | soup = BeautifulSoup(rendered, 'html.parser')
47 | h1_tag = soup.find('h1')
48 |
49 | self.assertTrue(h1_tag, 'title tag missing')
50 |
51 | def test_title_h_only_number_bigger_than_6(self):
52 | template = Template('{% load drc %} {% drc_title 9 %}')
53 | rendered = template.render(Context({}))
54 | soup = BeautifulSoup(rendered, 'html.parser')
55 | h6_tag = soup.find('h6')
56 |
57 | self.assertTrue(h6_tag, 'title tag missing')
58 |
59 |
60 | class ParagraphsTagTest(TestCase):
61 |
62 | def test_paragraphs_show_up(self):
63 | template = Template('{% load drc %} {% drc_paragraphs 2 %}')
64 | rendered = template.render(Context({}))
65 | soup = BeautifulSoup(rendered, 'html.parser')
66 | p_tags = soup.find_all('p')
67 |
68 | self.assertTrue(p_tags, 'paragraph tags missing')
69 | self.assertTrue(len(p_tags) == 2, 'not enough paragraphs')
70 | self.assertFalse(DRC_MISSING_FILE_MSG in str(p_tags[0]),
71 | 'language file missing')
72 | self.assertFalse(DRC_EMPTY_FILE_MSG in str(p_tags[0]),
73 | 'language file empty')
74 | self.assertFalse(p_tags[0].is_empty_element, 'paragraph tag is empty')
75 |
76 | def test_paragraphs_only_one_p(self):
77 | template = Template('{% load drc %} {% drc_paragraphs 1 %}')
78 | rendered = template.render(Context({}))
79 | soup = BeautifulSoup(rendered, 'html.parser')
80 | p_tags = soup.find_all('p')
81 |
82 | self.assertTrue(p_tags, 'paragraph tags missing')
83 | self.assertTrue(len(p_tags) == 1, 'not enough paragraphs')
84 |
85 |
86 | class ImageTagTest(TestCase):
87 | def test_image_shows_up(self):
88 | template = Template('{% load drc %} {% drc_image 300 200 "sport" %}')
89 | rendered = template.render(Context({}))
90 | soup = BeautifulSoup(rendered, 'html.parser')
91 | img_tag = soup.find('img')
92 |
93 | self.assertTrue(img_tag, 'image tag missing')
94 | img_source = img_tag.attrs.get('src')
95 | self.assertTrue('300/200' in img_source, 'wrong image dimensions')
96 | self.assertTrue('300/200/sport' in img_source, 'wrong image category')
97 |
98 | def test_image_gray(self):
99 | template = Template('{% load drc %} {% drc_image 300 200 gray=True %}')
100 | rendered = template.render(Context({}))
101 | soup = BeautifulSoup(rendered, 'html.parser')
102 | img_tag = soup.find('img')
103 |
104 | img_source = img_tag.attrs.get('src')
105 | self.assertTrue('/g/' in img_source, 'image not in grayscale')
106 |
107 | def test_image_specific_id(self):
108 | template = Template(
109 | '{% load drc %} {% drc_image category="people" image_id=2 %}')
110 | rendered = template.render(Context({}))
111 | soup = BeautifulSoup(rendered, 'html.parser')
112 | img_tag = soup.find('img')
113 |
114 | img_source = img_tag.attrs.get('src')
115 | self.assertTrue('/people/2' in img_source, 'specific image id not set')
116 |
117 |
118 | class NumberTagTest(TestCase):
119 | def test_number_shows_up(self):
120 | template = Template('{% load drc %} {% drc_number 1 100 %}')
121 | rendered = template.render(Context({}))
122 | number = int(rendered)
123 | self.assertTrue(1 <= number <= 100, 'number out of bounds')
124 |
125 | def test_number_value_error(self):
126 | template = Template('{% load drc %} {% drc_number 1 "nope" %}')
127 | rendered = template.render(Context({}))
128 |
129 | self.assertEqual(rendered.strip(),
130 | 'please provide a number as an argument',
131 | 'argument of wrong type passed')
132 |
133 | def test_number_when_2nd_number_bigger_than_1st(self):
134 | template = Template('{% load drc %} {% drc_number 100 1 %}')
135 | rendered = template.render(Context({}))
136 | number = int(rendered)
137 | self.assertTrue(1 <= number <= 100, 'number out of bound')
138 |
139 |
140 | class GetLanguage(TestCase):
141 | def test_get_language(self):
142 | self.assertEqual(DRC_LANGUAGE, get_language())
143 | self.assertNotEqual('hr', get_language())
144 | self.assertEqual('hr', get_language('hr'))
145 |
146 |
147 | class GetTextFileTest(TestCase):
148 | def test_existing_file(self):
149 | text_file = get_text_file('en')
150 | self.assertIsNotNone(text_file)
151 | self.assertTrue(hasattr(text_file, 'read'))
152 |
153 | def test_nonexisting_file(self):
154 | text_file = get_text_file('xyz')
155 | self.assertIsNone(text_file)
156 |
157 |
158 | class SaveContentTest(TestCase):
159 | def setUp(self):
160 | content = (
161 | ''
162 | ''
163 | ''
164 | '