diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 47580d8..f8c41fa 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -16,11 +16,11 @@ jobs: # - { python-version: 3.9, os: ubuntu-latest, session: "safety" } - { python-version: 3.9, os: ubuntu-latest, session: "mypy" } - { python-version: 3.8, os: ubuntu-latest, session: "mypy" } - - { python-version: 3.7, os: ubuntu-latest, session: "mypy" } + # - { python-version: 3.7, os: ubuntu-latest, session: "mypy" } #- { python-version: 3.6, os: ubuntu-latest, session: "mypy" } - { python-version: 3.9, os: ubuntu-latest, session: "tests" } - { python-version: 3.8, os: ubuntu-latest, session: "tests" } - - { python-version: 3.7, os: ubuntu-latest, session: "tests" } + # - { python-version: 3.7, os: ubuntu-latest, session: "tests" } #- { python-version: 3.6, os: ubuntu-latest, session: "tests" } - { python-version: 3.9, os: windows-latest, session: "tests" } - { python-version: 3.9, os: macos-latest, session: "tests" } diff --git a/noxfile.py b/noxfile.py index 902e97b..dcff892 100644 --- a/noxfile.py +++ b/noxfile.py @@ -20,7 +20,7 @@ package = "lep_downloader" -python_versions = ["3.9", "3.8", "3.7"] +python_versions = ["3.9", "3.8"] nox.needs_version = ">= 2021.6.6" nox.options.sessions = ( "pre-commit", @@ -129,7 +129,9 @@ def mypy(session: Session) -> None: def tests(session: Session) -> None: """Run the test suite.""" session.install(".") - session.install("coverage[toml]", "pytest", "pygments", "requests_mock") + session.install( + "coverage[toml]", "pytest", "pygments", "requests_mock", "pytest-mock" + ) try: session.run("coverage", "run", "--parallel", "-m", "pytest", *session.posargs) finally: @@ -154,7 +156,7 @@ def coverage(session: Session) -> None: def typeguard(session: Session) -> None: """Runtime type checking using Typeguard.""" session.install(".") - session.install("pytest", "typeguard", "pygments", "requests_mock") + session.install("pytest", "typeguard", "pygments", "requests_mock", "pytest-mock") session.run("pytest", f"--typeguard-packages={package}", *session.posargs) diff --git a/poetry.lock b/poetry.lock index d9ca464..df52107 100644 --- a/poetry.lock +++ b/poetry.lock @@ -651,6 +651,20 @@ toml = "*" [package.extras] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +[[package]] +name = "pytest-mock" +version = "3.6.1" +description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "tox", "pytest-asyncio"] + [[package]] name = "pytz" version = "2021.1" @@ -1006,7 +1020,7 @@ python-versions = "*" [[package]] name = "typeguard" -version = "2.13.0" +version = "2.13.3" description = "Run-time type checker for Python" category = "dev" optional = false @@ -1099,7 +1113,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt [metadata] lock-version = "1.1" python-versions = "^3.7.0" -content-hash = "0b467ec70e5acb74ed5ae1325b11ed9fe97e3045daec12260af55f70dc77c44a" +content-hash = "58d6699b88c63da63d1617c172694ed5838988e3c61f7bea19be71b7403569d1" [metadata.files] alabaster = [ @@ -1479,6 +1493,10 @@ pytest = [ {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, ] +pytest-mock = [ + {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, + {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, +] pytz = [ {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, @@ -1750,8 +1768,8 @@ typed-ast = [ {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, ] typeguard = [ - {file = "typeguard-2.13.0-py3-none-any.whl", hash = "sha256:0bc44d1ff865b522eda969627868b0e001c8329296ce50aededbea03febc79ee"}, - {file = "typeguard-2.13.0.tar.gz", hash = "sha256:04e38f92eb59410c9375d3be23df65e0a7643f2e8bcbd421423d808d2f9e99df"}, + {file = "typeguard-2.13.3-py3-none-any.whl", hash = "sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1"}, + {file = "typeguard-2.13.3.tar.gz", hash = "sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4"}, ] typing-extensions = [ {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, diff --git a/pyproject.toml b/pyproject.toml index 9c01a4d..bd89cf0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "lep-downloader" -version = "3.0.0a1" +version = "3.0.0a4" description = "LEP Downloader - CLI app for parsing and downloading episodes of Luke's English Podcast" authors = ["Artem Hotenov "] license = "MIT" @@ -30,7 +30,7 @@ pytest = "^6.2.4" coverage = {extras = ["toml"], version = "^5.4"} safety = "^1.10.3" mypy = "^0.902" -typeguard = "^2.12.1" +typeguard = "^2.13.3" xdoctest = {extras = ["colors"], version = "^0.15.4"} sphinx = "^4.0.2" sphinx-autobuild = "^2021.3.14" @@ -53,6 +53,7 @@ flake8-black = "^0.2.3" flake8-import-order = "^0.18.1" rope = "^0.20.1" yapf = "^0.31.0" +pytest-mock = "^3.6.1" [tool.poetry.scripts] lep-downloader = "lep_downloader.__main__:main" diff --git a/src/lep_downloader/cli.py b/src/lep_downloader/cli.py index 4fe53e3..23cc5f4 100644 --- a/src/lep_downloader/cli.py +++ b/src/lep_downloader/cli.py @@ -1,45 +1,35 @@ """CLI main click group.""" -import importlib +# MIT License +# +# Copyright (c) 2022 Artem Hotenov +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +from datetime import datetime from pathlib import Path -from typing import Any -from typing import List import click +from click import Context from lep_downloader import __version__ - - -plugin_folder = Path( - Path(__file__).resolve().parent, - "commands", -) -package_name = __package__ - - -class MyCLI(click.MultiCommand): - """Custom click multi command. - - To support commands being loaded "lazily" from plugin folder. - """ - - def list_commands(self, ctx: click.Context) -> List[str]: - """Returns list of commands in plugin_folder.""" - command_names = [] - for filepath in list(plugin_folder.iterdir()): - if filepath.suffix == ".py" and filepath.name != "__init__.py": - command_names.append(filepath.name[:-3]) - command_names.sort() - return command_names - - def get_command(self, ctx: click.Context, name: str) -> Any: - """Evaluates code of command module.""" - try: - cmd_module = importlib.import_module( - f"{package_name}.{plugin_folder.stem}.{name}" - ) - except ModuleNotFoundError: - return - return cmd_module.cli # type: ignore +from lep_downloader.cli_shared import common_options +from lep_downloader.cli_shared import MyCLI +from lep_downloader.commands.download import cli as download_cli @click.command( @@ -47,9 +37,22 @@ def get_command(self, ctx: click.Context, name: str) -> Any: invoke_without_command=True, ) @click.version_option(version=__version__) -def cli() -> None: +@common_options +@click.pass_context +def cli( + ctx: Context, + episode: str, + pdf_yes: bool, + last_yes: bool, + start_date: datetime, + end_date: datetime, + dest: Path, + db_url: str, + quiet: bool, +) -> None: """LEP-downloader - console application. Get free episodes of Luke's English Podcast archive page. """ - click.echo(f"cli() in '{Path(__file__).name}' was executed...") + if ctx.invoked_subcommand is None: + ctx.forward(download_cli) diff --git a/src/lep_downloader/cli_shared.py b/src/lep_downloader/cli_shared.py new file mode 100644 index 0000000..1160dc3 --- /dev/null +++ b/src/lep_downloader/cli_shared.py @@ -0,0 +1,208 @@ +"""Shared objects for CLI commands.""" +# MIT License +# +# Copyright (c) 2022 Artem Hotenov +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +import importlib +from datetime import datetime +from datetime import time +from datetime import timedelta +from datetime import timezone +from functools import update_wrapper +from pathlib import Path +from typing import Any +from typing import Callable +from typing import List + +import click +from click import Context +from click import Parameter + +from lep_downloader import config as conf + + +plugin_folder = Path( + Path(__file__).resolve().parent, + "commands", +) +package_name = __package__ + +LepInt: click.IntRange = click.IntRange(0, 9999, clamp=True) + + +class MyCLI(click.MultiCommand): + """Custom click multi command. + + To support commands being loaded "lazily" from plugin folder. + """ + + def list_commands(self, ctx: click.Context) -> List[str]: + """Returns list of commands in plugin_folder.""" + command_names = [] + for filepath in list(plugin_folder.iterdir()): + if filepath.suffix == ".py" and filepath.name != "__init__.py": + command_names.append(filepath.name[:-3]) + command_names.sort() + return command_names + + def get_command(self, ctx: click.Context, name: str) -> Any: + """Evaluates code of command module.""" + try: + cmd_module = importlib.import_module( + f"{package_name}.{plugin_folder.stem}.{name}" + ) + except ModuleNotFoundError: + return + return cmd_module.cli # type: ignore + + +def common_options(f: Callable[..., Any]) -> Callable[..., Any]: + """Add a common (shared) options to click command.""" + + @click.option( + "--episode", + "-ep", + type=click.UNPROCESSED, + callback=validate_episode_number, + default="0-9999", + help=( + "Episode number for downloading. " + "To specify range of episodes use hyphen, i.e. -." + ), + metavar="", + ) + @click.option( + "--with-pdf", + "-pdf", + "pdf_yes", + is_flag=True, + help="Tells script to download PDF of episide page as well.", + ) + @click.option( + "--last", + "last_yes", + is_flag=True, + help=( + "For downloading the last episode from database. " + "Episode number and date filters (ranges) will be ignored." + ), + ) + @click.option( + "-S", + "start_date", + type=click.UNPROCESSED, + callback=validate_date, + help="To specify 'START DATE' for date range filtering. Format 'YYYY-MM-DD'", + ) + @click.option( + "-E", + "end_date", + type=click.UNPROCESSED, + callback=validate_date, + help="To specify 'END DATE' for date range filtering. Format 'YYYY-MM-DD'", + ) + @click.option( + "--dest", + "-d", + type=click.Path(file_okay=False, path_type=Path), + callback=validate_dir, + default=Path(), + help="Directory path (absolute or relative) to LEP files destination.", + metavar="", + ) + @click.option( + "--db-url", + "-db", + "db_url", + default=conf.JSON_DB_URL, + help="URL to custom JSON database file.", + metavar="", + ) + @click.option( + "--quiet", + "-q", + "quiet", + is_flag=True, + help=( + "Activate quiet mode. " + "There is no question whether to download files or not." + ), + ) + def new_func(*args, **kwargs): # type: ignore + return f(*args, **kwargs) + + return update_wrapper(new_func, f) + + +def validate_episode_number( + ctx: Context, + param: Parameter, + value: Any, +) -> Any: + """Validate value of 'episode' option.""" + start, sep, end = value.partition("-") + if start and not end and not sep: + return LepInt(start), LepInt(start) + elif start and not end: + return LepInt(start), LepInt(9999) + elif not start and end: + return LepInt(0), LepInt(end) + return LepInt(start), LepInt(end) + + +def validate_date( + ctx: Context, + param: Parameter, + value: Any, +) -> Any: + """Validate value of '-S' and '-E' (start / end date) options.""" + if not value: + return None + + filter_time = time(0, 1) # Begining of a day + if param.name == "end_date": + filter_time = time(23, 55) # End (almost) of a day + try: + parsed_date = datetime.strptime(value, "%Y-%m-%d") + date_utc = datetime.combine( + parsed_date.date(), + filter_time, + tzinfo=timezone(timedelta(hours=2)), + ) + return date_utc + except ValueError: + raise click.BadParameter("date format must be 'YYYY-MM-DD'") + + +def validate_dir(ctx: Context, param: Parameter, value: Any) -> Any: + """Check is dir writable or not. + + Create all parent folders to target destination. + """ + try: + value.mkdir(parents=True, exist_ok=True) + probe_file = value / "tmp_dest.txt" + probe_file.write_text("Directory is writable", encoding="utf-8") + probe_file.unlink() + return value + except PermissionError: + raise click.BadParameter("folder has no 'write' permission.") + except OSError as ex: + raise click.BadParameter(ex.args[1]) diff --git a/src/lep_downloader/commands/download.py b/src/lep_downloader/commands/download.py index e8eea06..3472bfd 100644 --- a/src/lep_downloader/commands/download.py +++ b/src/lep_downloader/commands/download.py @@ -1,8 +1,112 @@ """Download command.""" +# MIT License +# +# Copyright (c) 2022 Artem Hotenov +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +from datetime import datetime +from pathlib import Path + import click +from lep_downloader import downloader +from lep_downloader.cli_shared import common_options +from lep_downloader.downloader import ATrack +from lep_downloader.downloader import Audio +from lep_downloader.downloader import LepFileList +from lep_downloader.downloader import PagePDF +from lep_downloader.exceptions import DataBaseUnavailable +from lep_downloader.lep import LepEpisodeList + + +def require_to_press_enter(quiet: bool) -> None: + """Prevent script closing without reading execution output.""" + if not quiet: + click.confirm( + "Press 'Enter' key to close 'LEP-downloader'", + # prompt_suffix="...", + show_default=False, + ) + click.get_current_context().exit() + @click.command(name="download") -def cli() -> None: +@common_options +def cli( # noqa: C901 'too complex' + episode: str, + pdf_yes: bool, + last_yes: bool, + start_date: datetime, + end_date: datetime, + dest: Path, + db_url: str, + quiet: bool, +) -> None: """Downloads LEP episodes on disk.""" - click.echo("download_cmd() was executed...") + lep_dl = downloader.LepDL(db_url) + filtered_episodes = LepEpisodeList() + filtered_files = LepFileList() + + try: + lep_dl.use_or_get_db_episodes() + except DataBaseUnavailable: + click.echo("JSON database is not available now.\n" + "Try again later.") + require_to_press_enter(quiet) + click.get_current_context().exit() + + if not lep_dl.db_episodes: # no valid episode objects + require_to_press_enter(quiet) + click.get_current_context().exit() + + if not last_yes: + if start_date or end_date: + filtered_episodes = lep_dl.db_episodes.filter_by_date(start_date, end_date) + else: + filtered_episodes = lep_dl.db_episodes.filter_by_number(*episode) + else: + filtered_episodes.append(lep_dl.db_episodes[0]) + + lep_dl.files = downloader.gather_all_files(filtered_episodes) + lep_dl.populate_default_url() + + file_filter = LepFileList([Audio, ATrack]) + + if pdf_yes: + file_filter.append(PagePDF) + + filtered_files = lep_dl.files.filter_by_type(*file_filter) + + lep_dl.detach_existed_files(dest, filtered_files) + + total_number = len(lep_dl.non_existed) + + if total_number > 0: + if not quiet: + click.echo(f"{total_number} non-existing file(s) will be downloaded.") + # click.echo("Would download file(s). Proceed (y/n)?: ") + if click.confirm("Do you want to continue?"): + lep_dl.download_files(dest) + else: + click.echo("Your answer is 'NO'. Exit.") + else: + lep_dl.download_files(dest) + else: + click.echo("Nothing to download for now.") + + require_to_press_enter(quiet) diff --git a/src/lep_downloader/commands/parse.py b/src/lep_downloader/commands/parse.py index 37cf96c..f66c7f7 100644 --- a/src/lep_downloader/commands/parse.py +++ b/src/lep_downloader/commands/parse.py @@ -3,6 +3,10 @@ from lep_downloader import config as conf from lep_downloader import parser +from lep_downloader.exceptions import DataBaseUnavailable +from lep_downloader.exceptions import NoEpisodeLinksError +from lep_downloader.exceptions import NoEpisodesInDataBase +from lep_downloader.exceptions import NotEpisodeURLError @click.command(name="parse") @@ -10,4 +14,19 @@ def cli() -> None: """Parses LEP archive web page.""" click.echo("'parse' command was executed...") - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) + try: + archive = parser.Archive() + archive.do_parsing_actions(conf.JSON_DB_URL) + except NotEpisodeURLError as ex: + click.echo(f"{ex.args[1]}:\n\t{ex.args[0]}") + click.echo("Archive page has invalid HTML content. Exit.") + except NoEpisodeLinksError as ex: + click.echo(f"{ex.args[1]}:\n\t{ex.args[0]}") + click.echo("Can't parse any episodes. Exit.") + except DataBaseUnavailable: + click.echo("JSON database is not available. Exit.") + except NoEpisodesInDataBase as ex: + click.echo( + f"[WARNING]: JSON file ({conf.JSON_DB_URL}) has no valid episode objects." + ) + click.echo("\t" + ex.args[0]) diff --git a/src/lep_downloader/config.py b/src/lep_downloader/config.py index 40b97a6..4b929a0 100644 --- a/src/lep_downloader/config.py +++ b/src/lep_downloader/config.py @@ -25,6 +25,9 @@ ARCHIVE_URL = "https://hotenov.com" JSON_DB_URL = "https://hotenov.com/some_json.json" +DEFAULT_JSON_NAME = "lep-db.min.json" + +DOWNLOADS_BASE_URL = "https://hotenov.com/d/lep/" LOCAL_ARCHIVE_HTML = "2021-08-10_lep-archive-page-content-pretty.html" LOCAL_JSON_DB = "mocked-db-json-equal-786-objects.json" @@ -52,8 +55,19 @@ } # yapf: enable -IRRELEVANT_LINKS = ("https://wp.me/P4IuUx-82H",) +IRRELEVANT_LINKS = {"https://wp.me/P4IuUx-82H"} EPISODE_LINK_RE = r"https?://((?Pwp\.me/p4IuUx-[\w-]+)|(teacherluke\.(co\.uk|wordpress\.com)/(?P\d{4}/\d{2}/\d{2})/))" # noqa: E501,B950 INVALID_PATH_CHARS_RE = r"[<>:\"/\\\\|?*]" + +# Headers for Production session # +ses_headers = { + "Connection": "keep-alive", + "sec-ch-ua": '" Not A;Brand";v="99", "Chromium";v="96", "Microsoft Edge";v="96"', + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": '"Windows"', + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62", # noqa: E501,B950 + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,application/signed-exchange;v=b3;q=0.9", # noqa: E501,B950 +} diff --git a/src/lep_downloader/data_getter.py b/src/lep_downloader/data_getter.py deleted file mode 100644 index 18d480f..0000000 --- a/src/lep_downloader/data_getter.py +++ /dev/null @@ -1,84 +0,0 @@ -# MIT License -# -# Copyright (c) 2021 Artem Hotenov -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -"""Module for getting data from the Internet.""" -import json -import typing as t - -import requests - -from lep_downloader.lep import as_lep_episode_obj -from lep_downloader.lep import LepEpisode - - -s = requests.Session() - - -def get_web_page_html_text(page_url: str, session: requests.Session) -> t.Any: - """Return HTML text of LEP archive page.""" - final_location = page_url - is_url_ok = False - with session: - try: - resp = session.get(page_url, timeout=(6, 33)) - final_location = resp.url - if not resp.ok: - resp.raise_for_status() - except requests.exceptions.HTTPError as err: - return (f"[ERROR]: {err}", final_location, is_url_ok) - except requests.exceptions.Timeout as err: - return (f"[ERROR]: Timeout | {err}", final_location, is_url_ok) - except requests.exceptions.ConnectionError as err: - return (f"[ERROR]: Bad request | {err}", final_location, is_url_ok) - except Exception as err: - return ( - f"[ERROR]: Unhandled error | {err}", - final_location, - is_url_ok, - ) - else: - resp.encoding = "utf-8" - final_location = resp.url - is_url_ok = True - return (resp.text, final_location, is_url_ok) - - -def get_list_of_valid_episodes( - json_body: str, - json_url: t.Optional[str] = None, -) -> t.List[LepEpisode]: - """Return list of valid (not None) LepEpisode objects.""" - db_episodes: t.List[LepEpisode] = [] - try: - db_episodes = json.loads(json_body, object_hook=as_lep_episode_obj) - except json.JSONDecodeError: - print(f"[ERROR]: Data is not a valid JSON document.\n\tURL: {json_url}") - return [] - else: - is_db_str: bool = isinstance(db_episodes, str) - db_episodes = [obj for obj in db_episodes if obj] - if not db_episodes or is_db_str: - print( - f"[WARNING]: JSON file ({json_url}) has no valid episode objects." # noqa: E501,B950 - ) - return [] - else: - return db_episodes diff --git a/src/lep_downloader/downloader.py b/src/lep_downloader/downloader.py index cc54437..1675425 100644 --- a/src/lep_downloader/downloader.py +++ b/src/lep_downloader/downloader.py @@ -21,20 +21,22 @@ # SOFTWARE. """LEP module for downloading logic.""" import re +import urllib.parse +from dataclasses import dataclass from pathlib import Path -from typing import Dict +from typing import Any from typing import List +from typing import Optional from typing import Tuple +from typing import Type +from typing import Union import requests from lep_downloader import config as conf -from lep_downloader.data_getter import s +from lep_downloader.lep import Lep from lep_downloader.lep import LepEpisode - - -DataForEpisodeAudio = List[Tuple[str, str, List[List[str]], bool]] -NamesWithAudios = List[Tuple[str, List[str]]] +from lep_downloader.lep import LepEpisodeList # COMPILED REGEX PATTERNS # @@ -42,77 +44,205 @@ INVALID_PATH_CHARS_PATTERN = re.compile(conf.INVALID_PATH_CHARS_RE) -# STATISTICS (LOG) DICTIONARIES # +@dataclass +class LepFile: + """Represent base class for LEP file object.""" -successful_downloaded: Dict[str, str] = {} -unavailable_links: Dict[str, str] = {} -already_on_disc: Dict[str, str] = {} -duplicated_links: Dict[str, str] = {} + ep_id: int = 0 + name: str = "" + ext: str = "" + short_date: str = "" + filename: str = "" + primary_url: str = "" + secondary_url: str = "" + tertiary_url: str = "" -def select_all_audio_episodes( - db_episodes: List[LepEpisode], -) -> List[LepEpisode]: - """Return filtered list with AUDIO episodes.""" - audio_episodes = [ep for ep in db_episodes if ep.post_type == "AUDIO"] - return audio_episodes +@dataclass +class Audio(LepFile): + """Represent episode (or part of it) audio object.""" + ext: str = ".mp3" + part_no: int = 0 -def get_audios_data(audio_episodes: List[LepEpisode]) -> DataForEpisodeAudio: - """Return list with audios data for next downloading.""" - audios_data: DataForEpisodeAudio = [] - is_multi_part: bool = False - for ep in reversed(audio_episodes): - short_date = ep.date[:10] - title = ep.post_title - audios = ep.audios - if audios is not None: - is_multi_part = False if len(audios) < 2 else True + def __post_init__(self) -> None: + """Compose filename for this instance.""" + if self.part_no > 0: + self.filename = ( + f"[{self.short_date}] # {self.name} [Part {str(self.part_no).zfill(2)}]" + + self.ext + ) else: - audios = [] - data_item = (short_date, title, audios, is_multi_part) - audios_data.append(data_item) - return audios_data - - -def bind_name_and_file_url(audios_data: DataForEpisodeAudio) -> NamesWithAudios: - """Return list of tuples (filename, list(file_urls)).""" - single_part_name: str = "" - audios_links: NamesWithAudios = [] - for item in audios_data: - short_date, title = item[0], item[1] - audios, is_multi_part = item[2], item[3] - single_part_name = f"[{short_date}] # {title}" - safe_part_name = INVALID_PATH_CHARS_PATTERN.sub("_", single_part_name) - if is_multi_part: - for i, audio_part in enumerate(audios, start=1): - part_name = safe_part_name + f" [Part {str(i).zfill(2)}]" - part_item = (part_name, audio_part) - audios_links.append(part_item) + self.filename = f"[{self.short_date}] # {self.name}" + self.ext + + +@dataclass +class PagePDF(LepFile): + """Represent PDF file of episode page.""" + + ext: str = ".pdf" + + def __post_init__(self) -> None: + """Compose filename for this instance.""" + self.filename = f"[{self.short_date}] # {self.name}" + self.ext + + +@dataclass +class ATrack(LepFile): + """Represent audio track to episode (or part of it) object.""" + + ext: str = ".mp3" + part_no: int = 0 + + def __post_init__(self) -> None: + """Compose filename for this instance.""" + if self.part_no > 0: + self.filename = ( + f"[{self.short_date}] # {self.name} [Part {str(self.part_no).zfill(2)}]" + + " _aTrack_" + + self.ext + ) else: - binding = (safe_part_name, item[2][0]) - audios_links.append(binding) - return audios_links + self.filename = ( + f"[{self.short_date}] # {self.name}" + " _aTrack_" + self.ext + ) + + +class LepFileList(List[Any]): + """Represent list of LepFile objects.""" + + def filter_by_type(self, *file_types: Any) -> Any: + """Return new filtered list by file type(s).""" + file_types = tuple(file_types) + filtered = LepFileList(file for file in self if isinstance(file, file_types)) + return filtered + + +def crawl_list(links: List[str]) -> Tuple[str, str, str]: + """Crawl list of links and return tuple of three links.""" + primary_url = secondary_url = tertiary_url = "" + links_number = len(links) + if links_number == 1: + primary_url = links[0] + else: + if links_number == 2: + primary_url = links[0] + secondary_url = links[1] + if links_number == 3: + primary_url = links[0] + secondary_url = links[1] + tertiary_url = links[2] + return primary_url, secondary_url, tertiary_url + + +def add_each_audio_to_shared_list( + ep_id: int, + name: str, + short_date: str, + audios: List[List[str]], + file_class: Union[Type[Audio], Type[ATrack]], +) -> None: + """Gather data for each episode audio. + + Then add it as 'Audio' or 'ATrack' object to shared list of LepFile objects. + """ + is_multi_part = False if len(audios) < 2 else True + start = int(is_multi_part) + + for i, part_links in enumerate(audios, start=start): + part_no = i + primary_url, secondary_url, tertiary_url = crawl_list(part_links) + audio_file = file_class( + ep_id=ep_id, + name=name, + short_date=short_date, + part_no=part_no, + primary_url=primary_url, + secondary_url=secondary_url, + tertiary_url=tertiary_url, + ) + global files_box + files_box.append(audio_file) + + +def add_page_pdf_file( + ep_id: int, + name: str, + short_date: str, + page_pdf: List[str], +) -> None: + """Gather page PDF for episode. + + Then add it as 'PagePDF' object to shared 'files' list of LepFile objects. + """ + global files_box + if not page_pdf: + pdf_file = PagePDF( + ep_id=ep_id, + name=name, + short_date=short_date, + ) + files_box.append(pdf_file) + else: + primary_url, secondary_url, tertiary_url = crawl_list(page_pdf) + pdf_file = PagePDF( + ep_id=ep_id, + name=name, + short_date=short_date, + primary_url=primary_url, + secondary_url=secondary_url, + tertiary_url=tertiary_url, + ) + files_box.append(pdf_file) + + +files_box = LepFileList() + + +def gather_all_files(lep_episodes: LepEpisodeList) -> LepFileList: + """Skim passed episode list and collect all files. + + Return module's 'files_box' list. + """ + global files_box + files_box = LepFileList() + ep: LepEpisode + + for ep in reversed(lep_episodes): + if ep.files: + audios = ep.files.setdefault("audios", []) + if audios: + add_each_audio_to_shared_list( + ep.index, ep.post_title, ep._short_date, audios, Audio + ) + audio_tracks = ep.files.setdefault("atrack", []) + if audio_tracks: + add_each_audio_to_shared_list( + ep.index, ep.post_title, ep._short_date, audio_tracks, ATrack + ) + page_pdf = ep.files.setdefault("page_pdf", []) + add_page_pdf_file(ep.index, ep.post_title, ep._short_date, page_pdf) + return files_box def detect_existing_files( - audios_links: NamesWithAudios, save_dir: Path, - file_ext: str = ".mp3", -) -> Tuple[NamesWithAudios, NamesWithAudios]: - """Return lists for existing and non-existing files.""" - existing: NamesWithAudios = [] - non_existing: NamesWithAudios = [] + files: LepFileList, +) -> Tuple[LepFileList, LepFileList]: + """Separate lists for existing and non-existing files.""" + existed = LepFileList() + non_existed = LepFileList() only_files_by_ext: List[str] = [] + possible_extensions = {".mp3", ".pdf", ".mp4"} only_files_by_ext = [ - p.stem for p in save_dir.glob("*") if p.suffix.lower() == file_ext + p.name for p in save_dir.glob("*") if p.suffix.lower() in possible_extensions ] - for audio in audios_links: - if audio[0] in only_files_by_ext: - existing.append(audio) + for file in files: + if file.filename in only_files_by_ext: + existed.append(file) else: - non_existing.append(audio) - return (existing, non_existing) + non_existed.append(file) + return existed, non_existed def download_and_write_file( @@ -135,8 +265,9 @@ def download_and_write_file( is_writing_started = True print(f" + {filename}") return True - except OSError as err: - print(f"[ERROR]: Can't write file: {err}") + except OSError: + # TODO (hotenov): Add log or debug print only + # print(f"[ERROR]: Can't write file: {err}") if is_writing_started: file_path.unlink() # Delete incomplete file # pragma: no cover # It's hard to mock / monkeypatch this case @@ -147,39 +278,98 @@ def download_and_write_file( return False -def download_files( - downloads_bunch: NamesWithAudios, - save_dir: Path, - file_ext: str = ".mp3", -) -> None: - """Download files from passed links bunch.""" - for item in downloads_bunch: - file_stem: str = item[0] - links: List[str] = item[1] - filename = file_stem + file_ext - - primary_link = links[0] - if Path(save_dir / filename).exists(): - already_on_disc[primary_link] = filename - continue # Skip already downloaded file on disc. - if primary_link in successful_downloaded: - duplicated_links[primary_link] = filename - continue # Skip already processed URL. - - result_ok = download_and_write_file(primary_link, s, save_dir, filename) - if result_ok: - successful_downloaded[primary_link] = filename - else: - if len(links) > 1: # Try downloading for auxiliary links - for aux_link in links[1:]: +class LepDL(Lep): + """Represent downloader object.""" + + def __init__( + self, + json_url: str = conf.JSON_DB_URL, + session: requests.Session = None, + ) -> None: + """Initialize LepDL object. + + Args: + json_url (str): URL to JSON datavase + session (requests.Session): Requests session object + if None, get default global session. + """ + super().__init__(session) + self.json_url = json_url + self.db_episodes: LepEpisodeList = LepEpisodeList() + self.files: LepFileList = LepFileList() + self.downloaded: LepFileList = LepFileList() + self.not_found: LepFileList = LepFileList() + self.existed: LepFileList = LepFileList() + self.non_existed: LepFileList = LepFileList() + + def use_or_get_db_episodes(self) -> None: + """Take database episodes after parsing stage. + + Or get them from web JSON file. + """ + if not self.db_episodes: + self.db_episodes = Lep.get_db_episodes(self.json_url) + + def detach_existed_files( + self, + save_dir: Path, + files: Optional[LepFileList] = None, + ) -> None: + """Detach 'existed' files from non 'non_existed'.""" + files = files if files else self.files + self.existed, self.non_existed = detect_existing_files(save_dir, files) + + def populate_default_url(self) -> None: + """Fill in download url (if it is empty) with default value. + + Operate with 'files' shared list. + """ + populated_files = LepFileList() + for file in self.files: + if not file.secondary_url: + file.secondary_url = conf.DOWNLOADS_BASE_URL + urllib.parse.quote( + file.filename + ) + populated_files.append(file) + self.files = populated_files + + def download_files( + self, + save_dir: Path, + ) -> None: + """Download files from passed links bunch.""" + for file_obj in self.non_existed: + filename = file_obj.filename + primary_link = file_obj.primary_url + + if Path(save_dir / filename).exists(): + self.existed.append(file_obj) + continue # Skip already downloaded file on disc. + + result_ok = download_and_write_file( + primary_link, + Lep().cls_session, + save_dir, + filename, + ) + if result_ok: + self.downloaded.append(file_obj) + else: + secondary_url = file_obj.secondary_url + tertiary_url = file_obj.tertiary_url + aux_result_ok = False + + # Try downloading for auxiliary links + if secondary_url: aux_result_ok = download_and_write_file( - aux_link, s, save_dir, filename + secondary_url, self.session, save_dir, filename ) - if not aux_result_ok: - unavailable_links[aux_link] = filename - print(f"[INFO]: Can't download: {filename}") + if tertiary_url and not aux_result_ok: + aux_result_ok = download_and_write_file( + tertiary_url, self.session, save_dir, filename + ) + if aux_result_ok: + self.downloaded.append(file_obj) else: - successful_downloaded[aux_link] = filename - else: - unavailable_links[primary_link] = filename - print(f"[INFO]: Can't download: {filename}") + self.not_found.append(file_obj) + print(f"[INFO]: Can't download: {filename}") diff --git a/src/lep_downloader/exceptions.py b/src/lep_downloader/exceptions.py new file mode 100644 index 0000000..0392f45 --- /dev/null +++ b/src/lep_downloader/exceptions.py @@ -0,0 +1,95 @@ +# MIT License +# +# Copyright (c) 2021 Artem Hotenov +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +"""Module for LEP custom exceptions.""" + + +class LepException(Exception): + """Base class for exceptions in 'lep_downloader' package.""" + + pass + + +class NoEpisodeLinksError(LepException): + """Raised when no valid episode links on page. + + Attributes: + url (str): URL which has no episode links. Default is '' + message (str): Explanation of the error. Default is '' + """ + + def __init__(self, url: str = "", message: str = "") -> None: + """Initialize NoEpisodeLinksError exception.""" + self.url = url + self.message = message + + +class NotEpisodeURLError(LepException): + """Raised when given URL is not episode / archive URL. + + Attributes: + url (str): URL which has
tag. Default is '' + message (str): Explanation of the error. Default is '' + """ + + def __init__(self, url: str = "", message: str = "") -> None: + """Initialize NotEpisodeURLError exception.""" + self.url = url + self.message = message + + +class LepEpisodeNotFound(LepException): + """Raised when given episode URL is not available. + + Attributes: + episode (LepEpisode): Episode object. + Partially filled to add as 'bad' episode. + message (str): Explanation of the error. Default is '' + """ + + def __init__(self, episode: object, message: str = "") -> None: + """Initialize NotEpisodeURLError exception.""" + self.bad_episode = episode + self.message = message + + +class DataBaseUnavailable(LepException): + """Raised when JSON database file is not available. + + Attributes: + message (str): Explanation of the error. Default is '' + """ + + def __init__(self, message: str = "") -> None: + """Initialize DataBaseUnavailable exception.""" + self.message = message + + +class NoEpisodesInDataBase(LepException): + """Raised when JSON database has no any valid episode. + + Attributes: + message (str): Explanation of the error. Default is '' + """ + + def __init__(self, message: str = "") -> None: + """Initialize NoEpisodesInDataBase exception.""" + self.message = message diff --git a/src/lep_downloader/lep.py b/src/lep_downloader/lep.py index e174f3c..c53492f 100644 --- a/src/lep_downloader/lep.py +++ b/src/lep_downloader/lep.py @@ -1,64 +1,335 @@ +# MIT License +# +# Copyright (c) 2021 Artem Hotenov +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. """LEP module for general logic and classes.""" import json -import typing as t +import re +from datetime import datetime +from datetime import timedelta +from datetime import timezone +from functools import total_ordering +from operator import attrgetter +from typing import Any +from typing import ClassVar +from typing import Dict +from typing import List +from typing import Optional +from typing import Union +import requests -class LepEpisode(object): - """LEP episode class.""" +from lep_downloader import config as conf +from lep_downloader.exceptions import DataBaseUnavailable + + +# COMPILED REGEX PATTERNS # + +INVALID_PATH_CHARS_PATTERN = re.compile(conf.INVALID_PATH_CHARS_RE) + +# PRODUCTION SESSION # +PROD_SES = requests.Session() +PROD_SES.headers.update(conf.ses_headers) + + +@total_ordering +class LepEpisode: + """LEP episode class. + + Args: + episode (int): Episode number. + date (str | datetime | None): Post datetime (default 2000-01-01T00:00:00+00:00). + It will be converted to UTC timezone. For None value default is set. + url (str): Final location of post URL. + post_title (str): Post title + extracted from tag text and converted to be safe for Windows path. + post_type (str): Post type ("AUDIO", "TEXT", etc.). + files (dict | None): Dictionary with files for episode. + Category file ("audios", "audiotrack", "page_pdf", etc) as 'files' key. + parsed_at (str): Parsing datetime in UTC timezone, with microseconds. + index (int): Parsing index + concatenation of URL date and increment (for several posts in a day). + admin_note (str): Note for administrator + and storing error message (for bad response) + updated_at (str): Datetime in UTC when episode was updated + (usually manually by admin) + html_title (str): Page title in HTML tag . + Important: Not stored in JSON database. + """ + + def _convert_date(self, date: Union[datetime, str, None]) -> datetime: + """Convert string date to datetime object and UTC timezone. + + Input format: 2000-01-01T00:00:00+00:00 + If datetime is passed, then only convert date to UTC timezone. + """ + if isinstance(date, str): + converted_date = datetime.strptime(date, "%Y-%m-%dT%H:%M:%S%z") + converted_date = converted_date.astimezone(timezone.utc) + else: + if date is not None: # To satisfy 'typeguard' check + converted_date = date.astimezone(timezone.utc) + else: + converted_date = datetime(2000, 1, 1, tzinfo=timezone.utc) + return converted_date def __init__( self, episode: int = 0, - date: str = "2000-01-01T00:00:00+00:00", + date: Union[datetime, str, None] = None, url: str = "", post_title: str = "", post_type: str = "", - parsing_utc: str = "", + parsed_at: str = "", index: int = 0, - audios: t.Optional[t.List[t.List[str]]] = None, + files: Optional[Dict[str, Any]] = None, admin_note: str = "", + updated_at: str = "", + html_title: str = "", ) -> None: - """Default instance of LepEpisode. - - Args: - episode (int): Episode number. - date (str): Post datetime (default 2000-01-01T00:00:00+00:00). - url (str): Final location of post URL. - post_title (str): Post title, extracted from tag <a> and safe for windows path. - post_type (str): Post type ("AUDIO", "TEXT", etc.). - audios (list): List of links lists (for multi-part episodes). - parsing_utc (str): Parsing datetime in UTC timezone (with microseconds). - index (int): Parsing index: concatenation of URL date and increment (for several posts). - admin_note (str): Note for administrator and storing error message (for bad response) - """ + """Initialize default instance of LepEpisode.""" self.episode = episode self.date = date self.url = url - self.post_title = post_title + self._post_title = post_title + self._origin_post_title = post_title self.post_type = post_type - self.audios = audios - self.parsing_utc = parsing_utc + self.files = files if files else {} + self.parsed_at = parsed_at self.index = index self.admin_note = admin_note + self.updated_at = updated_at + self._title = html_title + self._short_date = "" + + @property + def date(self) -> Any: + """Episode date.""" + return self._date + + @date.setter + def date(self, new_post_date: Union[datetime, str, None]) -> None: + """Episode date setter.""" + self._date = self._convert_date(new_post_date) + self._short_date = self._date.strftime(r"%Y-%m-%d") + + @property + def post_title(self) -> str: + """Post title (safe to use as filename).""" + return self._post_title + + @post_title.setter + def post_title(self, new_post_title: str) -> None: + """Post title setter (makes it safe).""" + self._origin_post_title = new_post_title + self._post_title = replace_unsafe_chars(new_post_title) + + def __lt__(self, object: Any) -> Any: + """Compare objects 'less than'.""" + return any( + ( + self.date < object.date, + self.index < object.index, + ) + ) + + def __eq__(self, object: Any) -> bool: + """Compare equal objects.""" + return all( + ( + self.date == object.date, + self.index == object.index, + ) + ) + + def __repr__(self) -> str: + """String representation of LepEpisode object.""" + return f"{self.index}:{self.episode:{4}}:{self.post_title[:16]}" + + +class LepEpisodeList(List[Any]): + """Represent list of LepEpisode objects.""" + + def desc_sort_by_date_and_index(self) -> Any: + """Return new sorted list by post datetime, then index.""" + sorted_episodes = LepEpisodeList( + sorted(self, key=attrgetter("date", "index"), reverse=True) + ) + return sorted_episodes + + def filter_by_type(self, type: str) -> Any: + """Return new filtered list with passed episode type (AUDIO, TEXT, etc).""" + filtered = LepEpisodeList(ep for ep in self if ep.post_type == type) + return filtered + + def filter_by_number(self, start: int, end: int) -> Any: + """Return new filtered list by episode number.""" + filtered = LepEpisodeList( + ep for ep in self if ep.episode >= start and ep.episode <= end + ) + return filtered + + default_start_date = datetime(1999, 1, 1, 0, 1, tzinfo=timezone.utc) + default_end_date = datetime(2999, 12, 31, 23, 55, tzinfo=timezone.utc) + + def filter_by_date( + self, + start: Optional[datetime] = None, + end: Optional[datetime] = None, + ) -> Any: + """Return new filtered list by episode (post) date.""" + start = start if start else self.default_start_date + end = end if end else self.default_end_date + filtered = LepEpisodeList( + ep for ep in self if ep.date >= start and ep.date <= end + ) + return filtered class LepJsonEncoder(json.JSONEncoder): """Custom JSONEncoder for LepEpisode objects.""" - def default(self, obj: t.Any) -> t.Any: + def default(self, obj: Any) -> Any: """Override 'default' method for encoding JSON objects.""" if isinstance(obj, LepEpisode): - return obj.__dict__ + date_0200_zone = obj.date.astimezone(timezone(timedelta(hours=2))) + return { + "episode": obj.episode, + "date": date_0200_zone.strftime(r"%Y-%m-%dT%H:%M:%S%z"), + "url": obj.url, + "post_title": obj.post_title, + "post_type": obj.post_type, + "files": obj.files, + "parsed_at": obj.parsed_at, + "index": obj.index, + "admin_note": obj.admin_note, + "updated_at": obj.updated_at, + } # Let the base class default method raise the TypeError - return json.JSONEncoder.default(self, obj) + return super().default(obj) -def as_lep_episode_obj(dct: t.Dict[str, t.Any]) -> t.Optional[LepEpisode]: - """Specialize JSON object decoding.""" +def as_lep_episode_obj(dct: Dict[str, Any]) -> Any: + """Specialize JSON objects decoding.""" + if dct == {} or ("audios" in dct): + return dct try: lep_ep = LepEpisode(**dct) + lep_ep._short_date = lep_ep.date.strftime(r"%Y-%m-%d") except TypeError: print(f"[WARNING]: Invalid object in JSON!\n\t{dct}") return None else: return lep_ep + + +class Lep: + """Represent base class for general attributes.""" + + cls_session: ClassVar[requests.Session] = requests.Session() + json_body: ClassVar[str] = "" + + def __init__(self, session: Optional[requests.Session] = None) -> None: + """Default instance of LepTemplate. + + Args: + session (requests.Session): Global session for descendants. + """ + self.session = session if session else PROD_SES + Lep.cls_session = self.session + + @classmethod + def get_web_document( + cls, + page_url: str, + session: Optional[requests.Session] = None, + ) -> Any: + """Return text content of web document (HTML, JSON, etc.).""" + session = session if session else cls.cls_session + final_location = page_url + is_url_ok = False + with session: + try: + resp = session.get(page_url, timeout=(6, 33)) + final_location = resp.url + if not resp.ok: + resp.raise_for_status() + except requests.exceptions.HTTPError as err: + return (f"[ERROR]: {err}", final_location, is_url_ok) + except requests.exceptions.Timeout as err: + return (f"[ERROR]: Timeout | {err}", final_location, is_url_ok) + except requests.exceptions.ConnectionError as err: + return (f"[ERROR]: Bad request | {err}", final_location, is_url_ok) + except Exception as err: + return ( + f"[ERROR]: Unhandled error | {err}", + final_location, + is_url_ok, + ) + else: + resp.encoding = "utf-8" + is_url_ok = True + return (resp.text, final_location, is_url_ok) + + @classmethod + def extract_only_valid_episodes( + cls, + json_body: str, + json_url: Optional[str] = None, + ) -> LepEpisodeList: + """Return list of valid (not None) LepEpisode objects.""" + db_episodes = LepEpisodeList() + try: + db_episodes = json.loads(json_body, object_hook=as_lep_episode_obj) + except json.JSONDecodeError: + print(f"[ERROR]: Data is not a valid JSON document.\n\tURL: {json_url}") + return LepEpisodeList() + else: + is_db_str: bool = isinstance(db_episodes, str) + # Remove None elements + db_episodes = LepEpisodeList(obj for obj in db_episodes if obj) + if not db_episodes or is_db_str: + print( + f"[WARNING]: JSON file ({json_url}) has no valid episode objects." # noqa: E501,B950 + ) + return LepEpisodeList() + else: + return db_episodes + + @classmethod + def get_db_episodes( + cls, + json_url: str, + session: Optional[requests.Session] = None, + ) -> LepEpisodeList: + """Get valid episode list by passed URL.""" + session = session if session else cls.cls_session + db_episodes = LepEpisodeList() + cls.json_body, _, status_db_ok = Lep.get_web_document(json_url, session) + if status_db_ok: + db_episodes = Lep.extract_only_valid_episodes(cls.json_body, json_url) + else: + raise DataBaseUnavailable() + return db_episodes + + +def replace_unsafe_chars(filename: str) -> str: + """Replace most common invalid path characters with '_'.""" + return INVALID_PATH_CHARS_PATTERN.sub("_", filename) diff --git a/src/lep_downloader/parser.py b/src/lep_downloader/parser.py index 40f8d3f..f7dff4e 100644 --- a/src/lep_downloader/parser.py +++ b/src/lep_downloader/parser.py @@ -1,16 +1,14 @@ """LEP module for parsing logic.""" -import copy import json import re -from collections import Counter from datetime import datetime from datetime import timezone -from operator import attrgetter from pathlib import Path from typing import Any +from typing import Dict from typing import List from typing import Optional -from typing import Tuple +from typing import Set import requests from bs4 import BeautifulSoup @@ -18,16 +16,17 @@ from bs4.element import Tag from lep_downloader import config as conf -from lep_downloader.data_getter import get_list_of_valid_episodes -from lep_downloader.data_getter import get_web_page_html_text -from lep_downloader.data_getter import s +from lep_downloader.downloader import LepDL +from lep_downloader.exceptions import LepEpisodeNotFound +from lep_downloader.exceptions import NoEpisodeLinksError +from lep_downloader.exceptions import NoEpisodesInDataBase +from lep_downloader.exceptions import NotEpisodeURLError +from lep_downloader.lep import Lep from lep_downloader.lep import LepEpisode +from lep_downloader.lep import LepEpisodeList from lep_downloader.lep import LepJsonEncoder -deleted_links = [] - - # COMPILED REGEX PATTERNS # EP_LINK_PATTERN = re.compile(conf.EPISODE_LINK_RE, re.IGNORECASE) @@ -51,110 +50,118 @@ href=re.compile(r"^(?!.*boos/(2794795|3727124))(?!.*uploads).*\.mp3$", re.I), ) -post_indexes: List[int] = [] - -DEFAULT_JSON_PATH = Path("lep-db.min.json") +class Archive(Lep): + """Represent archive page object.""" + + def __init__( + self, + url: str = conf.ARCHIVE_URL, + session: requests.Session = None, + ) -> None: + """Initialize an archive instance.""" + super().__init__(session) + self.url = url + self.parser = ArchiveParser(self, self.url) + self.collected_links: Dict[str, str] = {} + self.deleted_links: Set[str] = set() + self.used_indexes: Set[int] = set() + self.episodes: LepEpisodeList = LepEpisodeList() + + def fetch_updates( + self, + db_episodes: LepEpisodeList, + archive_urls: Optional[Dict[str, str]] = None, + ) -> Any: + """Fetch only new URLs between database and archive page.""" + archive_urls = archive_urls if archive_urls else self.collected_links + # TODO (hotenov): Here method .lower() for URL it's not quite right, + # need to replace with regex + db_urls = {ep.url.lower(): ep.post_title for ep in db_episodes} + last_url: str = [*db_urls][0] + date_of_last_db_episode = convert_date_from_url(last_url) + updates = { + url: text + for url, text in archive_urls.items() + if convert_date_from_url(url) > date_of_last_db_episode + } + if len(db_urls) > len(archive_urls): + return None + else: + return updates + + def parse_each_episode( + self, + urls: Dict[str, str], + ) -> None: + """Parse each episode collected from archive page. + + In for cycle: reversed collected links in order to start + from first episode to last in parsing action. + """ + # mypy warns only for Python 3.7.0 and below. + # https://docs.python.org/3/library/typing.html#typing.Reversible + for url, text in reversed(urls.items()): + try: + ep_parser = EpisodeParser(self, url, post_title=text) + ep_parser.parse_url() + self.episodes.append(ep_parser.episode) + except (NotEpisodeURLError): + # TODO (hotenov): Write to log / statistics + # for non-episode URL, but skip here + continue + except (LepEpisodeNotFound) as ex: + not_found_episode = ex.args[0] + self.episodes.append(not_found_episode) + continue + + def do_parsing_actions( + self, + json_url: str, + json_name: str = conf.DEFAULT_JSON_NAME, + ) -> None: + """Main methdod to do parsing job.""" + updates: Dict[str, str] = {} + + # Collect (get and parse) links and their texts from web archive page. + self.parser.parse_url() + + # Get database episodes from web JSON + lep_dl = LepDL(json_url, self.session) + lep_dl.use_or_get_db_episodes() + if lep_dl.db_episodes: + updates = self.fetch_updates(lep_dl.db_episodes, self.collected_links) + else: + raise NoEpisodesInDataBase( + "JSON is available, but\nthere are NO episodes in this file. Exit." + ) + if updates is None: + print( + "[WARNING]: Database contains more episodes", + "than current archive!", + ) + return None + if len(updates) > 0: + # Parse new episodes and add them to shared class list + # with parsed episodes (list empty until this statement) + self.parse_each_episode(updates) + new_episodes = self.episodes + new_episodes = LepEpisodeList(reversed(new_episodes)) + all_episodes = LepEpisodeList(new_episodes + lep_dl.db_episodes) + all_episodes = all_episodes.desc_sort_by_date_and_index() + write_parsed_episodes_to_json(all_episodes, json_name) + else: + print("There are no new episodes. Exit.") + return None -def tag_a_with_episode(tag_a: Tag) -> bool: +def is_tag_a_repeated(tag_a: Tag) -> bool: """Returns True for appropriate link to episode.""" tag_text = tag_a.get_text() - is_appropriate = False + is_repeated = False match = DUPLICATED_EP_PATTERN.search(tag_text.strip()) - is_appropriate = False if match else True - return is_appropriate - - -def get_all_episode_links_from_soup( - soup_obj: BeautifulSoup, -) -> Tuple[List[str], List[str]]: - """Return list of links from HTML block.""" - all_links: List[str] = [] - all_titles: List[str] = [] - soup_a_only = BeautifulSoup( - str(soup_obj), - features="lxml", - parse_only=only_a_tags_with_ep_link, - ) - if len(soup_a_only) > 1: - tags_a_episodes = soup_a_only.find_all(tag_a_with_episode, recursive=False) - if len(tags_a_episodes) > 0: - for tag_a in tags_a_episodes: - link = tag_a["href"].strip() - link_string = " ".join([text for text in tag_a.stripped_strings]) - all_links.append(link) - all_titles.append(link_string) - return (all_links, all_titles) - else: - return (all_links, all_titles) - else: - return (all_links, all_titles) - - -def replace_misspelled_link(soup_obj: BeautifulSoup) -> BeautifulSoup: - """Replace link with '.ukm' misspelled LTD.""" - modified_soup = copy.copy(soup_obj) # TODO: Really needs to copy? - misspelled_tag_a = modified_soup.find( - "a", href="https://teacherluke.co.ukm/2012/08/06/london-olympics-2012/" - ) - if misspelled_tag_a: - misspelled_tag_a[ - "href" - ] = "https://teacherluke.co.uk/2012/08/06/london-olympics-2012/" - del misspelled_tag_a - return modified_soup - - -def remove_irrelevant_links( - links: List[str], - texts: List[str], -) -> Tuple[List[str], List[str]]: - """Return list of links without known irrelevant links.""" - for i, link in enumerate(links[:]): - if link in conf.IRRELEVANT_LINKS: - deleted_links.append(link) - del links[i] - del texts[i] - return (links, texts) - - -def substitute_short_links(unique_links: List[str]) -> List[str]: - """Return list of links with final location for short links.""" - final_links = copy.deepcopy(unique_links) - - for key, value in conf.SHORT_LINKS_MAPPING_DICT.items(): - try: - short_link_index = unique_links.index(key) - final_links[short_link_index] = value - except ValueError: - print(f"[WARNING]: No short links: {key}") - return final_links - - -def get_archive_parsing_results(archive_url: str) -> Any: - """Return Tuple with valid episode links and discarded links.""" - html_page = get_web_page_html_text(archive_url, s)[0] - soup_article = BeautifulSoup(html_page, "lxml", parse_only=only_article_content) - - if len(soup_article) > 1: - modified_soup = replace_misspelled_link(soup_article) - all_links: List[str] = [] - link_strings: List[str] = [] - all_links, link_strings = get_all_episode_links_from_soup(modified_soup) - - cleaned_links: List[str] = [] - cleaned_strings: List[str] = [] - cleaned_links, cleaned_strings = remove_irrelevant_links( - all_links, - link_strings, - ) - final_list = substitute_short_links(cleaned_links) - parsing_result = (final_list, deleted_links, cleaned_strings) - return parsing_result - else: - print("[ERROR] Can't parse this page: <article> tag was not found.") - return (None, None, None) + is_repeated = False if match else True + return is_repeated def parse_post_publish_datetime(soup: BeautifulSoup) -> str: @@ -177,7 +184,7 @@ def parse_episode_number(post_title: str) -> int: return 0 -def generate_post_index(post_url: str, indexes: List[int]) -> int: +def generate_post_index(post_url: str, indexes: Set[int]) -> int: """Returns index number for post.""" match = EP_LINK_PATTERN.match(post_url) if match: @@ -185,22 +192,21 @@ def generate_post_index(post_url: str, indexes: List[int]) -> int: date_from_url = groups_dict["date"] date_numbers = date_from_url.replace("/", "") - number_at_same_day = 1 - index_as_string = date_numbers + str(number_at_same_day).zfill(2) - new_index = int(index_as_string) + # Generate index using URL date, format example: 2021120101 + new_index = int(date_numbers + "1".zfill(2)) exists = False while not exists: if new_index in indexes: new_index += 1 else: - indexes.append(new_index) + indexes.add(new_index) exists = True return new_index else: return 0 -def appropriate_tag_a(tag_a: Tag) -> bool: +def has_tag_a_appropriate_audio(tag_a: Tag) -> bool: """Returns True for appropriate link to audio.""" tag_text = tag_a.get_text() if "http" in tag_text: @@ -223,7 +229,10 @@ def parse_post_audio(soup: BeautifulSoup) -> List[List[str]]: ) if len(soup_a_only) > 1: - tags_a_audio = soup_a_only.find_all(appropriate_tag_a, recursive=False) + tags_a_audio = soup_a_only.find_all( + has_tag_a_appropriate_audio, + recursive=False, + ) if len(tags_a_audio) > 0: for tag_a in tags_a_audio: audio = [tag_a["href"]] @@ -235,152 +244,213 @@ def parse_post_audio(soup: BeautifulSoup) -> List[List[str]]: return audios -def parse_single_page( - url: str, - session: requests.Session, - url_title: str, -) -> Optional[LepEpisode]: - """Returns a dict of parsed episode.""" - current_date_utc = datetime.now(timezone.utc) - parsing_date = current_date_utc.strftime(r"%Y-%m-%dT%H:%M:%S.%fZ") - - html_page, final_location, is_url_ok = get_web_page_html_text(url, session) - - index = generate_post_index(final_location, post_indexes) - if index == 0: - return None +def extract_date_from_url(url: str) -> str: + """Parse date from URL in YYYY/MM/DD format.""" + match = EP_LINK_PATTERN.match(url) + if match: + groups_dict = match.groupdict() + date_from_url = groups_dict["date"] + return date_from_url + else: + return "" - ep_number = parse_episode_number(url_title) - if not is_url_ok: - bad_ep = LepEpisode( - episode=ep_number, - url=final_location, - post_title=url_title, - parsing_utc=parsing_date, - index=index, - admin_note=html_page[:50], - ) - return bad_ep - - soup_article = BeautifulSoup(html_page, "lxml", parse_only=only_article_content) - post_date = parse_post_publish_datetime(soup_article) - - post_type = "AUDIO" - post_audios = parse_post_audio(soup_article) - if not post_audios: - post_type = "TEXT" - - lep_ep = LepEpisode( - episode=ep_number, - date=post_date, - url=final_location, - post_title=url_title, - post_type=post_type, - audios=post_audios, - parsing_utc=parsing_date, - index=index, - ) - return lep_ep - - -def get_parsed_episodes( - urls: List[str], - session: requests.Session, - texts: List[str], -) -> List[LepEpisode]: - """Returns list of parsed episodes.""" - parsed_episodes: List[LepEpisode] = [] - texts_from_first_to_last = list(reversed(texts)) - for i, url in enumerate(list(reversed(urls))): - url_title = texts_from_first_to_last[i] - ep = parse_single_page(url, session, url_title) - if ep is not None: - parsed_episodes.append(ep) - return parsed_episodes - - -def sort_episodes_by_post_date( - episodes: List[LepEpisode], -) -> List[LepEpisode]: - """Returns list of LepEpisodes sorted by post datetime.""" - sorted_episodes = sorted(episodes, key=attrgetter("date", "index"), reverse=True) - return sorted_episodes - - -def get_only_new_post_urls( - # json_string: str, - db_episodes: List[LepEpisode], - links: List[str], - texts: List[str], -) -> Any: - """Returns difference in URLs between database and archive page.""" - db_links_and_texts: List[Tuple[str, str]] - db_links_and_texts = [(item.url.lower(), item.post_title) for item in db_episodes] - archive_links_and_texts = list(zip(links, texts)) - ep_diff = list((Counter(archive_links_and_texts) - Counter(db_links_and_texts))) - if len(db_links_and_texts) > len(archive_links_and_texts): - return None - else: - return ep_diff +def convert_date_from_url(url: str) -> datetime: + """Convert URL string with date YYYY/MM/DD to datetime object.""" + url_date = extract_date_from_url(url) + return datetime.strptime(url_date, r"%Y/%m/%d") def write_parsed_episodes_to_json( - lep_objects: List[LepEpisode], - path: Path = DEFAULT_JSON_PATH, + lep_objects: LepEpisodeList, + json_name: str = conf.DEFAULT_JSON_NAME, ) -> None: """Write list of LepEpisode objects to file.""" - with open(path, "w") as outfile: + with open(Path(json_name), "w") as outfile: json.dump(lep_objects, outfile, indent=4, cls=LepJsonEncoder) -def do_parsing_actions( - json_url: str, - archive_url: str, - path_to_json: Path = DEFAULT_JSON_PATH, -) -> None: - """Main methdod to do parsing.""" - db_episodes: Optional[List[LepEpisode]] = [] - new_episodes: List[LepEpisode] = [] - # Get links and their texts for current archive state. - links, _, texts = get_archive_parsing_results(archive_url) - if links: - # Get database JSON content - json_body, _, status_db_ok = get_web_page_html_text(json_url, s) - if status_db_ok: - db_episodes = get_list_of_valid_episodes(json_body, json_url) - if db_episodes: - # Get differences between database and current archive - zipped_diff = get_only_new_post_urls(db_episodes, links, texts) - else: - print( - "JSON is available, but", - "\nthere are NO episode in this file. Exit.", - ) - return None - if zipped_diff is None: - print( - "[WARNING]: Database contains more episodes", - "than current archive!", - ) - return None - if len(zipped_diff) > 0: - # Unzip differences - new_links, new_texts = zip(*zipped_diff) - # Parse new episodes - new_episodes = get_parsed_episodes(list(new_links), s, list(new_texts)) - - all_episodes = new_episodes + db_episodes - all_episodes = sort_episodes_by_post_date(all_episodes) - - write_parsed_episodes_to_json(all_episodes, path_to_json) - else: - print("There are no new episodes. Exit.") - return None +class LepParser(Lep): + """Base class for LEP archive parsers.""" + + def __init__( + self, + archive_obj: Archive, + url: str, + session: requests.Session = None, + ) -> None: + """Initialize LepParser object. + + Args: + archive_obj (Archive): Instance of Archive object + to put and use data in its containers attributes. + url (str): URL for parsing. + session (requests.Session): Requests session object + if None, get default global session. + """ + super().__init__(session) + self.archive = archive_obj + self.url = url + self.content: str = "" + self.soup: BeautifulSoup = None + self.final_location: str = self.url + self.is_url_ok: bool = False + + def get_url(self) -> None: + """Retrive text content of archive web page.""" + get_result = Lep.get_web_document(self.url, self.session) + self.content = get_result[0] + self.final_location = get_result[1] + self.is_url_ok = get_result[2] + + def do_pre_parsing(self) -> None: + """Extract useful data before and prepare for parsing. + + For archive page - Substitute link with '.ukm' misspelled TLD. + For episode page - Generate index, parsed_at; parse episode number, etc. + """ + raise NotImplementedError() + + def parse_dom_for_article_container(self) -> None: + """Parse DOM for <article> tag only.""" + self.soup = BeautifulSoup(self.content, "lxml", parse_only=only_article_content) + if len(self.soup) < 2: # tag DOCTYPE always at [0] position + raise NotEpisodeURLError( + self.final_location, + "[ERROR]: Can't parse this page: <article> tag was not found.", + ) + + def collect_links(self) -> None: + """Parse all links matching regex pattern.""" + raise NotImplementedError() + + def do_post_parsing(self) -> None: + """Finalize and process parsing results.""" + raise NotImplementedError() + + def parse_url(self) -> None: + """Perform parsing.""" + self.get_url() + self.do_pre_parsing() + self.parse_dom_for_article_container() + self.collect_links() + self.do_post_parsing() + + +class ArchiveParser(LepParser): + """Parser object for archive page.""" + + def do_pre_parsing(self) -> None: + """Substitute link with '.ukm' misspelled TLD in HTML content.""" + self.content = self.content.replace(".co.ukm", ".co.uk") + + def collect_links(self) -> None: + """Parse all links matching episode URL and their texts. + + Also remove duplicated links. If an archive page consists completely of + duplicated links - silently go further (as if there are no episodes at all). + """ + soup_a_only = BeautifulSoup( + str(self.soup), + features="lxml", + parse_only=only_a_tags_with_ep_link, + ) + if len(soup_a_only) > 1: # tag DOCTYPE always at [0] position + # Remove all duplicated links + tags_a_episodes = soup_a_only.find_all(is_tag_a_repeated, recursive=False) + + for tag_a in tags_a_episodes: + link = tag_a["href"].strip() + link_string = " ".join([text for text in tag_a.stripped_strings]) + self.archive.collected_links[link] = link_string else: - print("JSON database is not available. Exit.") - return None + raise NoEpisodeLinksError( + self.final_location, + "[ERROR]: No episode links on archive page", + ) + + def remove_irrelevant_links(self) -> None: + """Delete known irrelevant links from dictionary. + + First, write irrelevant links into 'deleted_links' + before deletion them from dictionary. + Then rebuild dictionary skipping irrelevant links. + """ + self.archive.deleted_links = { + link + for link in self.archive.collected_links.keys() + if link in conf.IRRELEVANT_LINKS + } + self.archive.collected_links = { + link: text + for link, text in self.archive.collected_links.items() + if link not in conf.IRRELEVANT_LINKS + } + + def substitute_short_links(self) -> None: + """Paste final URL destination instead of short links.""" + for short, final in conf.SHORT_LINKS_MAPPING_DICT.items(): + # Rebuild dictionary changing only matched key + self.archive.collected_links = { + final if k == short else k: v + for k, v in self.archive.collected_links.items() + } + + def do_post_parsing(self) -> None: + """Remove irrelevant links and substitute short links.""" + self.remove_irrelevant_links() + self.substitute_short_links() + + +class EpisodeParser(LepParser): + """Parser object for episode page.""" + + def __init__( + self, + archive_obj: Archive, + page_url: str, + session: Optional[requests.Session] = None, + post_title: str = "", + ) -> None: + """Initialize EpisodeParser object.""" + super().__init__(archive_obj, page_url, session) + self.episode = LepEpisode() + self.episode.post_title = post_title + self.used_indexes = archive_obj.used_indexes + + def do_pre_parsing(self) -> None: + """Parse episode date, number, index.""" + self.episode.index = generate_post_index(self.final_location, self.used_indexes) + if self.episode.index == 0: + raise NotEpisodeURLError(self.final_location) + + self.episode.url = self.final_location + current_date_utc = datetime.now(timezone.utc) + self.episode.parsed_at = current_date_utc.strftime(r"%Y-%m-%dT%H:%M:%S.%fZ") + + self.episode.episode = parse_episode_number(self.episode.post_title) + + full_soup = BeautifulSoup(self.content, "lxml") + if full_soup.title is not None: + self.episode._title = full_soup.title.string + else: + self.episode._title = "NO TITLE!" + del full_soup + + if not self.is_url_ok: + self.episode.url = self.final_location + self.episode.admin_note = self.content[:50] + raise LepEpisodeNotFound(self.episode) + + def collect_links(self) -> None: + """Parse link(s) to episode audio(s).""" + self.episode.date = parse_post_publish_datetime(self.soup) + self.episode.files["audios"] = parse_post_audio(self.soup) + if not self.episode.files["audios"]: + self.episode.post_type = "TEXT" + else: + self.episode.post_type = "AUDIO" - else: - print("[ERROR]: Can't parse any episodes from archive page.") - return + def do_post_parsing(self) -> None: + """Add parsed episode to shared list.""" + pass diff --git a/tests/conftest.py b/tests/conftest.py index 46acf02..25626d3 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -23,6 +23,7 @@ import json import shutil from datetime import datetime +from datetime import timezone from pathlib import Path from typing import Any from typing import Callable @@ -43,9 +44,6 @@ from requests_mock.response import _Context as rm_Context -DataForEpisodeAudio = List[Tuple[str, str, List[List[str]], bool]] -NamesWithAudios = List[Tuple[str, List[str]]] - # yapf: disable URL_HTML_MAPPING = { "https://teacherluke.co.uk/2009/04/12/episode-1-introduction/": @@ -90,6 +88,10 @@ def req_ses() -> requests.Session: """Returns global (for all tests) requests session.""" s = requests.Session() + test_headers = { + "User-Agent": "MOCKzilla/0.666", + } + s.headers.update(test_headers) return s @@ -193,9 +195,9 @@ def modified_json_less_db_mock(db_episodes: List[object]) -> str: from lep_downloader import lep # Delete three episodes - del db_episodes[0] - del db_episodes[1] - del db_episodes[6] + del db_episodes[0] # Remove '733' + del db_episodes[0] # Remove '714' + del db_episodes[4] # Remove 'LEP on ZEP' modified_json = json.dumps(db_episodes, cls=lep.LepJsonEncoder) del db_episodes return modified_json @@ -217,58 +219,49 @@ def modified_json_extra_db_mock(db_episodes: List[object]) -> str: def archive_parsing_results_mock( requests_mock: rm_Mocker, archive_page_mock: str, -) -> Tuple[List[str], List[str]]: + req_ses: requests.Session, + archive: Any, +) -> Any: """Returns two lists: links and texts from mocked archive page.""" from lep_downloader import config as conf from lep_downloader import parser requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) - parsing_result: Tuple[List[str], ...] - parsing_result = parser.get_archive_parsing_results(conf.ARCHIVE_URL) - all_links: List[str] = parsing_result[0] - all_texts: List[str] = parsing_result[2] - return all_links, all_texts + archive_parser = parser.ArchiveParser(archive, conf.ARCHIVE_URL, req_ses) + archive_parser.parse_url() + del archive_parser + return archive.collected_links @pytest.fixture def parsed_episodes_mock( requests_mock: rm_Mocker, - archive_parsing_results_mock: Tuple[List[str], List[str]], + archive_parsing_results_mock: Dict[str, str], single_page_mock: str, single_page_matcher: Optional[Callable[[_RequestObjectProxy], bool]], - req_ses: requests.Session, -) -> List[Any]: + archive: Any, +) -> Any: """Returns list of LepEpisode objects. - Mocked episodes among others with correct post date. + Mocked episodes among others, with parsed (not default) post date. """ - from lep_downloader import parser - - all_links, all_texts = archive_parsing_results_mock requests_mock.get( req_mock.ANY, additional_matcher=single_page_matcher, text=single_page_mock, ) - parsed_episodes = parser.get_parsed_episodes(all_links, req_ses, all_texts) - return parsed_episodes + archive.parse_each_episode(archive_parsing_results_mock) + # parsed_episodes = copy.deepcopy(Archive.episodes) + return archive.episodes @pytest.fixture def mocked_episodes( parsed_episodes_mock: List[Any], ) -> List[Any]: - """Only episodes which have HTML mock page.""" - lep_date_format = "%Y-%m-%dT%H:%M:%S%z" - min_date = datetime.strptime( - "2009-03-03T03:03:03+02:00", - lep_date_format, - ) - mocked_episodes = [ - ep - for ep in parsed_episodes_mock - if datetime.strptime(ep.__dict__["date"], lep_date_format) > min_date - ] + """Fixture with episodes which have HTML mock page only.""" + min_date = datetime(2009, 3, 3, 3, 3, 3, tzinfo=timezone.utc) + mocked_episodes = [ep for ep in parsed_episodes_mock if ep.date > min_date] return mocked_episodes @@ -314,36 +307,40 @@ def mp3_file2_mock(mp3_mocks_path: Path) -> bytes: @pytest.fixture(scope="session") def only_valid_episodes(json_db_mock: str) -> List[Any]: """Returns list of valid LepEpisode objects from JSON mocked database.""" - from lep_downloader import data_getter + from lep_downloader.lep import Lep + from lep_downloader.lep import LepEpisodeList - mocked_db_episodes = data_getter.get_list_of_valid_episodes(json_db_mock) + mocked_db_episodes: LepEpisodeList = Lep.extract_only_valid_episodes(json_db_mock) return mocked_db_episodes @pytest.fixture(scope="session") -def only_audio_episodes(only_valid_episodes: List[Any]) -> List[Any]: +def only_audio_episodes(only_valid_episodes: Any) -> List[Any]: """Returns only audio episodes from all.""" - from lep_downloader import downloader + from lep_downloader.lep import LepEpisodeList - audio_episodes = downloader.select_all_audio_episodes(only_valid_episodes) + audio_episodes: LepEpisodeList = only_valid_episodes.filter_by_type("AUDIO") return audio_episodes -@pytest.fixture(scope="session") -def only_audio_data(only_audio_episodes: List[Any]) -> DataForEpisodeAudio: +@pytest.fixture +def only_audio_data( + only_valid_episodes: Any, + lep_dl: Any, +) -> Any: """Returns only extracted audio data from audio episodes.""" from lep_downloader import downloader + from lep_downloader.downloader import Audio - audio_data = downloader.get_audios_data(only_audio_episodes) - return audio_data + lep_dl.files = downloader.gather_all_files(only_valid_episodes) + audio_files = lep_dl.files.filter_by_type(Audio) + return audio_files -@pytest.fixture(scope="session") -def only_audio_links(only_audio_data: DataForEpisodeAudio) -> NamesWithAudios: +@pytest.fixture +def only_audio_links(only_audio_data: List[Any]) -> List[Tuple[str, str]]: """Returns only links and names for audio files.""" - from lep_downloader import downloader - - audio_links = downloader.bind_name_and_file_url(only_audio_data) + audio_links = [(af.filename, af.primary_url) for af in only_audio_data] return audio_links @@ -356,9 +353,10 @@ def runner() -> CliRunner: @pytest.fixture def run_cli_with_args(runner: CliRunner) -> Callable[[List[str]], Result]: """Fixture for getting CLI runner result for this package.""" - from lep_downloader import cli def _my_pkg_result(cli_args: List[str]) -> Result: + from lep_downloader import cli + result = runner.invoke( cli.cli, cli_args, @@ -367,3 +365,21 @@ def _my_pkg_result(cli_args: List[str]) -> Result: return result return _my_pkg_result + + +@pytest.fixture +def lep_dl(req_ses: requests.Session) -> Any: + """Fixture for new instance of LepDL class.""" + from lep_downloader.downloader import LepDL + + new_lep_dl = LepDL(session=req_ses) + return new_lep_dl + + +@pytest.fixture +def archive(req_ses: requests.Session) -> Any: + """Fixture for new instance of Archive class.""" + from lep_downloader.parser import Archive + + new_archive = Archive(session=req_ses) + return new_archive diff --git a/tests/fixtures/mocked-db-json-equal-786-objects.json b/tests/fixtures/mocked-db-json-equal-786-objects.json index 719bbce..09e5368 100644 --- a/tests/fixtures/mocked-db-json-equal-786-objects.json +++ b/tests/fixtures/mocked-db-json-equal-786-objects.json @@ -1,8708 +1,9486 @@ [ - { - "episode": 733, - "date": "2021-08-03T18:12:02+02:00", - "url": "https://teacherluke.co.uk/2021/08/03/733-a-summer-ramble/", - "post_title": "733. A Summer Ramble", - "post_type": "AUDIO", - "audios": [ - ["https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3"] - ], - "parsing_utc": "2021-10-14T07:35:31.597990Z", - "index": 2021080301, - "admin_note": "" - }, - { - "episode": 714, - "date": "2021-04-11T23:32:42+02:00", - "url": "https://teacherluke.co.uk/2021/04/11/714-robin-from-hamburg-%F0%9F%87%A9%F0%9F%87%AA-wisbolep-runner-up/", - "post_title": "714. Robin from Hamburg (WISBOLEP Runner-Up)", - "post_type": "AUDIO", - "audios": [ - [ - "https://traffic.libsyn.com/secure/teacherluke/714._Robin_from_Hamburg__WISBOLEP_Runner-Up.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:31.361072Z", - "index": 2021041101, - "admin_note": "" - }, - { - "episode": 711, - "date": "2021-03-26T15:06:43+01:00", - "url": "https://teacherluke.co.uk/2021/03/26/711-william-from-france-%F0%9F%87%AB%F0%9F%87%B7-wisbolep-runner-up/", - "post_title": "711. William from France (WISBOLEP Runner-UP)", - "post_type": "AUDIO", - "audios": [ - [ - "https://traffic.libsyn.com/secure/teacherluke/711._William_from_France__WISBOLEP_Runner-UP.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:31.264099Z", - "index": 2021032601, - "admin_note": "" - }, - { - "episode": 703, - "date": "2021-02-03T18:33:04+01:00", - "url": "https://teacherluke.co.uk/2021/02/03/703-walaa-from-syria-wisbolep-competition-winner-%F0%9F%8F%86/", - "post_title": "703. Walaa from Syria \u2013 WISBOLEP Competition Winner", - "post_type": "AUDIO", - "audios": [ - [ - "https://traffic.libsyn.com/secure/teacherluke/703._Walaa_from_Syria_-_WISBOLEP_Competition_Winner_.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:31.140983Z", - "index": 2021020301, - "admin_note": "" - }, - { - "episode": 0, - "date": "2017-08-26T07:30:24+02:00", - "url": "https://teacherluke.co.uk/2017/08/26/website-only-a-history-of-british-pop-a-musical-tour-through-james-vinyl-collection/", - "post_title": "[Website only] A History of British Pop \u2013 A Musical Tour through James\u2019 Vinyl Collection", - "post_type": "TEXT", - "audios": [], - "parsing_utc": "2021-10-14T07:35:29.221311Z", - "index": 2017082601, - "admin_note": "" - }, - { - "episode": 0, - "date": "2017-05-26T12:46:40+02:00", - "url": "https://teacherluke.co.uk/2017/05/26/i-was-invited-onto-the-english-across-the-pond-podcast/", - "post_title": "I was invited onto the \u201cEnglish Across The Pond\u201d Podcast", - "post_type": "TEXT", - "audios": [], - "parsing_utc": "2021-10-14T07:35:28.963595Z", - "index": 2017052601, - "admin_note": "" - }, - { - "episode": 0, - "date": "2017-03-11T18:45:49+01:00", - "url": "https://teacherluke.co.uk/2017/03/11/lep-on-zep-my-recent-interview-on-zdeneks-english-podcast/", - "post_title": "LEP on ZEP \u2013 My recent interview on Zdenek\u2019s English Podcast", - "post_type": "AUDIO", - "audios": [ - [ - "https://audioboom.com/posts/5602875-episode-166-luke-back-on-zep-part-1.mp3" - ], - [ - "https://audioboom.com/posts/5621870-episode-167-luke-back-on-zep-part-2.mp3" - ], - [ - "https://audioboom.com/posts/5627735-episode-168-luke-back-on-zep-part-3.mp3" - ], - [ - "https://audioboom.com/posts/5678762-episode-169-luke-back-on-zep-part-4.mp3" - ], - [ - "https://audioboom.com/posts/5695159-episode-170-luke-back-on-zep-part-5-analysis.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:28.727674Z", - "index": 2017031101, - "admin_note": "" - }, - { - "episode": 370, - "date": "2016-08-07T15:30:38+02:00", - "url": "https://teacherluke.co.uk/2016/08/07/370-in-conversation-with-rob-ager-from-liverpool-part-1-life-in-liverpool-interest-in-film-analysis/", - "post_title": "370. In Conversation with Rob Ager from Liverpool (PART 1: Life in Liverpool / Interest in Film Analysis)", - "post_type": "AUDIO", - "audios": [ - [ - "http://traffic.libsyn.com/teacherluke/370-in-conversation-with-rob-ager-from-liverpool-part-1-life-in-liverpool-interest-in-film-analysis.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:28.165853Z", - "index": 2016080701, - "admin_note": "" - }, - { - "episode": 305, - "date": "2015-10-07T09:25:39+02:00", - "url": "https://teacherluke.co.uk/2015/10/22/305-back-to-the-future-part-2/", - "post_title": "305. Back To The Future (Part 2)", - "post_type": "AUDIO", - "audios": [ - ["http://traffic.libsyn.com/teacherluke/300-2-episode-300-part-2.mp3"] - ], - "parsing_utc": "2021-10-14T07:35:27.557253Z", - "index": 2015102201, - "admin_note": "" - }, - { - "episode": 304, - "date": "2015-10-07T09:21:24+02:00", - "url": "https://teacherluke.co.uk/2015/10/21/304-back-to-the-future-part-1/", - "post_title": "304. Back To The Future (Part 1)", - "post_type": "AUDIO", - "audios": [ - ["http://traffic.libsyn.com/teacherluke/300-1-episode-300-part-1.mp3"] - ], - "parsing_utc": "2021-10-14T07:35:27.477279Z", - "index": 2015102101, - "admin_note": "" - }, - { - "episode": 193, - "date": "2014-06-30T15:37:44+02:00", - "url": "https://teacherluke.co.uk/2014/06/30/193-culture-shock-life-in-london-pt-2/", - "post_title": "193. Culture Shock: Life in London (Pt.2)", - "post_type": "AUDIO", - "audios": [ - [ - "http://traffic.libsyn.com/teacherluke/193-culture-shock-life-in-london-part-2.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:26.476157Z", - "index": 2014063002, - "admin_note": "" - }, - { - "episode": 113, - "date": "2012-09-27T11:49:36+02:00", - "url": "http://teacherluke.wordpress.com/2012/09/27/113-setting-the-world-to-rights/", - "post_title": "113. Setting The World To Rights", - "post_type": "AUDIO", - "audios": [ - [ - "http://traffic.libsyn.com/teacherluke/113-setting-the-world-to-rights.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:25.753394Z", - "index": 2012092701, - "admin_note": "" - }, - { - "episode": 36, - "date": "2010-03-25T22:59:36+01:00", - "url": "https://teacherluke.co.uk/2010/03/25/london-video-interviews-pt-1/", - "post_title": "36. London Video Interviews \u2013 Part 1 (Audio)", - "post_type": "AUDIO", - "audios": [ - [ - "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:25.059621Z", - "index": 2010032502, - "admin_note": "" - }, - { - "episode": 35, - "date": "2010-03-25T22:59:36+01:00", - "url": "https://teacherluke.co.uk/2010/03/25/london-video-interviews-pt-1/", - "post_title": "35. London Video Interviews \u2013 Part 1 (Video)", - "post_type": "AUDIO", - "audios": [ - [ - "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:24.951658Z", - "index": 2010032501, - "admin_note": "" - }, - { - "episode": 16, - "date": "2009-10-19T21:21:43+02:00", - "url": "https://teacherluke.co.uk/2009/10/19/episode-11-michael-jackson/", - "post_title": "16. Michael Jackson", - "post_type": "AUDIO", - "audios": [ - ["http://traffic.libsyn.com/teacherluke/16-michael-jackson.mp3"] - ], - "parsing_utc": "2021-10-14T07:35:24.719523Z", - "index": 2009101909, - "admin_note": "" - }, - { - "episode": 15, - "date": "2009-10-19T21:14:49+02:00", - "url": "https://teacherluke.co.uk/2009/10/19/extra-podcast-12-phrasal-verbs/", - "post_title": "15. Extra Podcast \u2013 12 Phrasal Verbs", - "post_type": "AUDIO", - "audios": [ - [ - "http://traffic.libsyn.com/teacherluke/15-extra-podcast-12-phrasal-verbs.mp3" - ] - ], - "parsing_utc": "2021-10-14T07:35:24.665541Z", - "index": 2009101908, - "admin_note": "" - }, - { - "episode": 1, - "date": "2009-04-12T15:23:33+02:00", - "url": "https://teacherluke.co.uk/2009/04/12/episode-1-introduction/", - "post_title": "1. Introduction", - "post_type": "AUDIO", - "audios": [["http://traffic.libsyn.com/teacherluke/1-introduction.mp3"]], - "parsing_utc": "2021-10-14T07:35:24.499596Z", - "index": 2009041201, - "admin_note": "" - }, - { - "episode": 732, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/07/29/732-christian-from-canguro-english-returns/", - "post_title": "732. Christian from Canguro English returns", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.589992Z", - "index": 2021072901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 731, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/07/25/731-beatles-song-lyrics-idioms-expressions-with-antony-rotunno/", - "post_title": "731. Beatles Song Lyrics / Idioms & Expressions (with Antony Rotunno)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.582996Z", - "index": 2021072501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 730, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/07/19/730-marie-connolly-returns-2-songs/", - "post_title": "730. Marie Connolly Returns (+ 2 songs)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.574997Z", - "index": 2021071901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 729, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/07/13/729-toefl-and-the-duolingo-english-test-with-josh-macpherson-from-tstprep-com/", - "post_title": "729. TOEFL and the Duolingo English Test (with Josh MacPherson from TSTPrep.com)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.567001Z", - "index": 2021071301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 728, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/07/05/728-english-with-rob-games-music-jingles/", - "post_title": "728. English with Rob / Games, Music & Jingles", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.559003Z", - "index": 2021070501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 727, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/06/30/727-describing-john-lennon-adjectives-of-personality-j-z-with-antony-rotunno/", - "post_title": "727. Describing John Lennon / Adjectives of Personality J-Z (with Antony Rotunno)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.551006Z", - "index": 2021063001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 726, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/06/26/726-describing-john-lennon-adjectives-of-personality-a-i-with-antony-rotunno/", - "post_title": "726. Describing John Lennon / Adjectives of Personality A-I (with Antony Rotunno)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.541009Z", - "index": 2021062601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/06/22/bonus-euro2020-swapcast-with-martin-johnston-rnr-zdenek-lukas-zep/", - "post_title": "BONUS: EURO2020 Swapcast with Martin Johnston (RnR) & Zdenek Lukas (ZEP) Parts 1 & 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.530012Z", - "index": 2021062201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 725, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/06/17/725-fun-games-for-learning-english-with-vickie-kelty/", - "post_title": "725. Fun & Games for Learning English with Vickie Kelty", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.523015Z", - "index": 2021061701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/06/16/unboxing-my-shiny-youtube-award-for-100000-subscribers-audio-and-video-versions/", - "post_title": "Unboxing my Shiny YouTube Award for 100,000 Subscribers (Audio and Video Versions)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.508024Z", - "index": 2021061601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 724, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/06/11/724-the-mountain-short-story-video/", - "post_title": "724. The Mountain (Short Story) + Video", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.515022Z", - "index": 2021061101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 723, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/06/04/723-bahar-from-iran-wisbolep-runner-up/", - "post_title": "723. Bahar from Iran (WISBOLEP Runner-Up)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.500023Z", - "index": 2021060401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 722, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/05/29/722-discussing-john-lennon-with-antony-rotunno/", - "post_title": "722. Discussing John Lennon with Antony Rotunno", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.492024Z", - "index": 2021052901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 721, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/05/24/721-collins-dictionary-word-quizzes-with-fred-eyangoh/", - "post_title": "721. Collins Dictionary Word Quizzes / Confusing Words with Fred Eyangoh", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.485028Z", - "index": 2021052401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 720, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/05/18/720-how-fred-learns-vocabulary-with-the-new-york-times-spelling-bee-with-fred-eyangoh/", - "post_title": "720. How Fred Learns Vocabulary with the New York Times Spelling Bee (with Fred Eyangoh)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.477031Z", - "index": 2021051801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 719, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/05/10/719-amber-paul-are-on-the-podcast/", - "post_title": "719. Amber & Paul are on the Podcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.469033Z", - "index": 2021051001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 718, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/05/03/718-michael-the-shaman-wisbloep-runner-up/", - "post_title": "718. Michael the Shaman (WISBLOEP Runner-Up)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.461035Z", - "index": 2021050301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 717, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/04/27/717-gills-book-club-one-two-three-four-the-beatles-in-time-by-craig-brown/", - "post_title": "717. Gill\u2019s Book Club: \u201cOne Two Three Four \u2013 The Beatles In Time\u201d by Craig Brown", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.454042Z", - "index": 2021042701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 716, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/04/22/716-interview-with-a-pop-star-from-the-1960s-megan-brady-from-the-applejacks/", - "post_title": "716. Interview with a Pop Star from the 1960s \u2013 Megan Brady from The Applejacks", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.446040Z", - "index": 2021042201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 715, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/04/16/715-catching-up-with-craig-wealand-lep-airc-swapcast/", - "post_title": "715. Catching up with Craig Wealand [LEP/AIRC Swapcast]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.439042Z", - "index": 2021041601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 713, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/04/07/713-lucky-dip-with-paul-taylor/", - "post_title": "713. Lucky Dip with Paul Taylor", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.354075Z", - "index": 2021040701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 712, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/04/03/712-a-chat-with-charlie-baxter/", - "post_title": "712. A Chat with Charlie Baxter", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.345073Z", - "index": 2021040301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 710, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/03/17/710-the-umbrella-man-by-roald-dahl-short-story/", - "post_title": "710. The Umbrella Man by Roald Dahl (Short Story)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.257102Z", - "index": 2021031701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 709, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/03/11/709-the-stoicism-of-groundhog-day-with-mum/", - "post_title": "709. The Stoicism of Groundhog Day (with Mum)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.249105Z", - "index": 2021031101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 708, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/03/05/708-tasha-liu-from-china-wisbolep-runner-up/", - "post_title": "708. Tasha Liu from China (WISBOLEP Runner-Up)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.242107Z", - "index": 2021030501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 707, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/03/01/707-2-2-lets-play-another-text-adventure-game-zombolocaust-by-peter-carlson/", - "post_title": "707. [2/2] Let\u2019s Play Another Text Adventure Game \u2013 \u201cZombolocaust\u201d by Peter Carlson", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.234114Z", - "index": 2021030101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 706, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/02/27/706-1-2-lets-play-another-text-adventure-game-zombolocaust-by-peter-carlson/", - "post_title": "706. [1/2] Let\u2019s Play Another Text Adventure Game \u2013 \u201cZombolocaust\u201d by Peter Carlson", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.226119Z", - "index": 2021022701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 705, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/02/24/705-kate-billington-returns-and-she-brought-cake/", - "post_title": "705. Kate Billington Returns (and she brought cake)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.218117Z", - "index": 2021022401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 704, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/02/11/704-the-rick-thompson-report-brexit-update-february-2021/", - "post_title": "704. The Rick Thompson Report: Brexit Update (February 2021)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.210124Z", - "index": 2021021101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 702, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/01/25/702-emergency-questions-with-james/", - "post_title": "702. Emergency Questions (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.132981Z", - "index": 2021012501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 701, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/01/19/701-legal-english-with-louise-kulbicki/", - "post_title": "701. Legal English with Louise Kulbicki", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.124988Z", - "index": 2021011901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 700, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/01/13/700-marooned-with-my-music-luke-thompson/", - "post_title": "700. Marooned With My Music: Luke Thompson", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.117986Z", - "index": 2021011301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 699, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2021/01/07/699-welcome-back-to-lukes-english-podcast-faq-january-2021/", - "post_title": "699. Welcome (back) to Luke\u2019s English Podcast / FAQ (January 2021)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.109993Z", - "index": 2021010701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 698, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/12/23/698-paul-is-on-the-podcast-random-questions-with-paul-taylor/", - "post_title": "698. Paul is on the Podcast / Random Questions with Paul Taylor", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.102995Z", - "index": 2020122301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 697, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/12/18/697-11-christmas-cracker-jokes-for-2020-explained/", - "post_title": "697. 11 Christmas Cracker Jokes for 2020, Explained", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.094998Z", - "index": 2020121801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 696, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/12/16/696-wisbolep-competition-results-ramble/", - "post_title": "696. WISBOLEP Competition Results + RAMBLE", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.088000Z", - "index": 2020121601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 695, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/12/11/695-pronunciation-pragmatics-procrastination-with-emma/", - "post_title": "695. Pronunciation, Pragmatics & Procrastination with Emma", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.080003Z", - "index": 2020121101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 694, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/12/07/694-the-crown-the-royal-family-a-royal-ramble-with-my-wife/", - "post_title": "694. The Crown / The Royal Family (A Royal Ramble with My Wife)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.073005Z", - "index": 2020120701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 693, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/11/30/693-english-with-lucy-a-conversation-with-lucy-earl/", - "post_title": "693. English With Lucy / A Conversation with Lucy Earl", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.066004Z", - "index": 2020113001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 692, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/11/23/wisbolep/", - "post_title": "692. WISBOLEP Competition Entries \u2013 Listen & Vote!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.058011Z", - "index": 2020112301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 691, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/11/18/691-jerome-butler-dialect-coach/", - "post_title": "691. Jerome Butler \u2013 Dialect Coach", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.051008Z", - "index": 2020111801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 690, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/11/12/690-urban-vs-rural-living-abroad-cultural-differences-with-cara-leopold/", - "post_title": "690. Urban vs Rural / Living Abroad / Cultural Differences (with Cara Leopold)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.043015Z", - "index": 2020111201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 689, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/11/06/689-baking-cakes-telling-jokes-speaking-chinese-with-kate-billington/", - "post_title": "689. Baking Cakes, Telling Jokes & Speaking Chinese with Kate Billington", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.036017Z", - "index": 2020110601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 688, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/11/02/689-sean-connery/", - "post_title": "688. Sean Connery", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.028015Z", - "index": 2020110201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 687, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/10/29/687-wisbolep-problem-polite-requests-an-inspiring-email-fly-me-to-the-moon/", - "post_title": "687. WISBOLEP Problem / Polite Requests / An Inspiring Email / Fly Me To the Moon", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.020023Z", - "index": 2020102901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 686, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/10/27/686-christian-from-canguro-english/", - "post_title": "686. Christian from Canguro English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.012025Z", - "index": 2020102701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 685, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/10/21/685-raising-bilingual-children-1-alex-and-his-daughter-alice-in-moscow/", - "post_title": "685. Raising Bilingual Children [1] Alex and his daughter Alice, in Moscow", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:31.004028Z", - "index": 2020102101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 684, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/10/15/684-chasing-the-tangent-train-with-elspeth-graty/", - "post_title": "684. Chasing the Tangent Train with Elspeth Graty", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.997030Z", - "index": 2020101501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 683, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/10/09/683-feelgood-stories-of-flirting-with-marie-connolly/", - "post_title": "683. Feelgood Stories of Flirting with Marie Connolly", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.989032Z", - "index": 2020100901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 682, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/09/25/682-key-features-of-english-accents-explained/", - "post_title": "682. Key Features of English Accents, Explained", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.982031Z", - "index": 2020092501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 681, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/09/16/681-new-competition-why-i-should-be-on-lep-wisbolep-story-the-first-time-i-said-fck/", - "post_title": "681. New Competition: Why I Should Be On LEP (WISBOLEP) / Story: The First Time I Said F*ck", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.974679Z", - "index": 2020091601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 680, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/09/09/680-park-life-a-year-in-the-wildlife-of-an-urban-park-by-rick-thompson-animal-collective-nouns/", - "post_title": "680. Park Life \u2013 A Year in The Wildlife Of An Urban Park (by Rick Thompson) / Animal Collective Nouns", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.966683Z", - "index": 2020090901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 679, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/09/04/679-gills-book-club-a-gentleman-in-moscow/", - "post_title": "679. Gill\u2019s Book Club: A Gentleman In Moscow", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.958691Z", - "index": 2020090401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 678, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/08/28/678-the-vintage-furniture-trade-in-london-with-howard-roach/", - "post_title": "678. The Vintage Furniture Trade in London (with Howard Roach)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.951692Z", - "index": 2020082801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 677, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/08/21/677-a-post-holiday-ramble-holiday-vocab-stories/", - "post_title": "677. A Post-Holiday Ramble / Holiday Vocab / Stories", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.943690Z", - "index": 2020082101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 676, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/08/01/676-david-crystal-lets-talk-how-english-conversation-works/", - "post_title": "676. David Crystal: Let\u2019s Talk \u2013 How English Conversation Works", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.936692Z", - "index": 2020080101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 675, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/07/24/675-an-unplanned-pre-holiday-ramble-july-2020/", - "post_title": "675. An Unplanned Pre-Holiday Ramble (July 2020)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.928695Z", - "index": 2020072401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 674, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/07/16/674-19-amusing-insurance-claims-car-crash-vocabulary/", - "post_title": "674. 19 Amusing Insurance Claims / Car Crash Vocabulary", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.921697Z", - "index": 2020071601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 673, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/07/07/673-conspiracies-ufos-life-hacks-with-james/", - "post_title": "673. Conspiracies / UFOs / Life Hacks (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.913704Z", - "index": 2020070701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 672, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/07/03/672-the-rick-thompson-report-covid-brexit-blm-july-2020/", - "post_title": "672. The Rick Thompson Report: COVID / BREXIT / BLM (July 2020)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.906707Z", - "index": 2020070301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 671, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/06/30/671-aussie-english-with-pete-smissen/", - "post_title": "671. Aussie English with Pete Smissen", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.898705Z", - "index": 2020063001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 670, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/06/22/670-language-learning-with-james-harris/", - "post_title": "670. Language Learning with James Harris", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.891711Z", - "index": 2020062201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 669, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/06/18/669-how-to-learn-english/", - "post_title": "669. How to Learn English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.883710Z", - "index": 2020061801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 668, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/06/13/668-lep-live-ask-me-anything-hang-out-with-luke-audio-version/", - "post_title": "668. LEP LIVE! Ask Me Anything / Hang Out With Luke (AUDIO VERSION)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.876716Z", - "index": 2020061301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 667, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/06/08/667-four-way-call-with-alex-moz-paul/", - "post_title": "667. Four Way Call (with Alex, Moz & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.868719Z", - "index": 2020060801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/06/07/announcement-im-doing-a-youtube-live-stream-on-wednesday-10-june-at-3pm-cet/", - "post_title": "Announcement: I\u2019m doing a YouTube Live Stream on Wednesday 10 June at 3PM CET", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.860723Z", - "index": 2020060701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 666, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/05/29/666-part-3-favourite-scary-films-with-james/", - "post_title": "666. [Part 3] Favourite Scary Films (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.853719Z", - "index": 2020052901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 666, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/05/27/666-part-2-frightening-experiences-with-james/", - "post_title": "666. [Part 2] Frightening Experiences (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.844728Z", - "index": 2020052701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 666, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/05/25/666-part-1-the-number-of-the-beast-scary-music-black-sabbath-with-james/", - "post_title": "666. [Part 1] The Number of the Beast / Scary Music / Black Sabbath (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.837729Z", - "index": 2020052501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 665, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/05/20/665-a-chinwag-with-sebastian-marx-18-british-slang-phrases-that-americans-dont-understand/", - "post_title": "665. A Chinwag with Sebastian Marx / 18+ British slang phrases that Americans don\u2019t understand", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.829727Z", - "index": 2020052001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 664, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/05/15/664-lockdown-ramble-with-my-wife/", - "post_title": "664. Lockdown Ramble with My Wife", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.822734Z", - "index": 2020051501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 663, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/05/04/663-the-lockdown-lying-game-with-amber-paul/", - "post_title": "663. The Lockdown Lying Game with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.813737Z", - "index": 2020050401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 662, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/04/29/662-catching-up-with-amber-paul-10-surviving-lockdown-with-kids/", - "post_title": "662. Catching Up with Amber & Paul #10 (Surviving Lockdown with Kids)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.806739Z", - "index": 2020042901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 661, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/04/17/661-an-englishman-in-los-angeles-headhunted-by-netflix-divided-by-a-common-language-with-oli-thompson/", - "post_title": "661. An Englishman in Los Angeles (with Oli)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.799738Z", - "index": 2020041701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 660, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/04/14/660-using-tv-series-films-to-improve-your-english/", - "post_title": "660. Using TV Series & Films to Improve Your English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.791739Z", - "index": 2020041401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 659, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/04/11/659-lockdown-chat-with-cara-leopold/", - "post_title": "659. Lockdown Chat with Cara Leopold", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.784742Z", - "index": 2020041101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 658, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/04/08/658-2-2-why-do-brits-sing-with-american-accents/", - "post_title": "658. [2/2] Why do Brits sing with American accents?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.776744Z", - "index": 2020040801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 657, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/04/07/657-1-2-why-do-brits-sing-with-american-accents/", - "post_title": "657. [1/2] Why do Brits sing with American accents?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.769747Z", - "index": 2020040701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 656, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/03/31/656-british-comedy-karl-pilkingtons-monkey-news-the-ricky-gervais-show/", - "post_title": "656. British Comedy: Karl Pilkington\u2019s Monkey News / The Ricky Gervais Show", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.761749Z", - "index": 2020033101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 655, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/03/28/655-coping-with-isolation-describing-feelings-and-emotions-vocabulary-experiences/", - "post_title": "655. Coping with Isolation / Describing Feelings and Emotions \u2013 Vocabulary & Experiences", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.754751Z", - "index": 2020032801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 654, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/03/23/654-computer-based-ielts-stories-about-the-first-time-with-jessica-beck-from-ielts-energy-podcast/", - "post_title": "654. Computer-based IELTS / Stories about The First Time\u2026 (with Jessica Beck from IELTS Energy Podcast)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.746754Z", - "index": 2020032301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 653, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/03/20/653-gills-book-club-the-five-the-untold-lives-of-the-women-killed-by-jack-the-ripper-by-hallie-rubenhold/", - "post_title": "653. Gill\u2019s Book Club \u2013 \u201cThe Five: The Untold Lives of the Women Killed by Jack the Ripper\u201d by Hallie Rubenhold / How to read books to improve your English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.739757Z", - "index": 2020032001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 652, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/03/13/652-the-rick-thompson-report-coronavirus-covid-19/", - "post_title": "652. The Rick Thompson Report: Coronavirus (COVID-19)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.730760Z", - "index": 2020031302, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 651, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/03/13/651-coronavirus-covid-19-vocabulary/", - "post_title": "651. Coronavirus (COVID-19) Vocabulary", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.723762Z", - "index": 2020031301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 650, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/03/10/650-british-music-jungle-with-james/", - "post_title": "650. British Music: Jungle (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.716769Z", - "index": 2020031001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 649, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/03/05/649-an-unedited-ramble-march-2020-never-explain-never-apologise-no-stress-method-to-the-madness-3-songs-on-guitar/", - "post_title": "649. An Unedited Ramble (March 2020) Never Explain, Never Apologise? / No Stress / Method To The Madness / 3 Songs on Guitar", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.707772Z", - "index": 2020030501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 648, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/02/24/648-ian-moore-returns/", - "post_title": "648. Ian Moore Returns", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.700775Z", - "index": 2020022401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 647, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/02/21/647-british-comedy-alan-partridge-part-6/", - "post_title": "647. British Comedy: Alan Partridge (Part 6)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.692777Z", - "index": 2020022101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 646, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/02/20/646-british-comedy-alan-partridge-part-5/", - "post_title": "646. British Comedy: Alan Partridge (Part 5)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.685779Z", - "index": 2020022001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 645, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/02/17/645-british-comedy-alan-partridge-part-4/", - "post_title": "645. British Comedy: Alan Partridge (Part 4)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.677782Z", - "index": 2020021701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 644, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/02/14/644-the-rick-thompson-report-is-brexit-done/", - "post_title": "644. The Rick Thompson Report: Is Brexit Done?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.670784Z", - "index": 2020021401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 643, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/02/11/643-the-intercultural-communication-dance-with-sherwood-fleming/", - "post_title": "643. The Intercultural Communication Dance with Sherwood Fleming", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.662786Z", - "index": 2020021101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 642, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/02/06/642-the-lying-game-returns-with-amber-paul/", - "post_title": "642. The Lying Game Returns (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.655789Z", - "index": 2020020601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 641, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/02/02/641-catching-up-with-amber-paul-9/", - "post_title": "641. Catching Up with Amber & Paul #9", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.647791Z", - "index": 2020020201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 640, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/01/28/640-ielts-speaking-success-with-keith-ohare/", - "post_title": "640. IELTS Speaking Success with Keith O\u2019Hare", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.640794Z", - "index": 2020012801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 639, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/01/23/639-3-quintessentially-british-books-that-you-might-not-know-about-with-mum/", - "post_title": "639. 3 Quintessentially British Books (that you might not know about) with Mum", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.632792Z", - "index": 2020012301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 638, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/01/19/638-3-quintessentially-british-things-that-you-might-not-know-about-with-dad/", - "post_title": "638. 3 Quintessentially British Things (that you might not know about) with Dad", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.624799Z", - "index": 2020011901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 637, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/01/14/637-5-quintessentially-english-things-that-you-might-not-know-about-with-james/", - "post_title": "637. 5 Quintessentially English Things (that you might not know about) with James", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.617797Z", - "index": 2020011401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 636, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/01/10/636-james-luke-discuss-star-wars-ix-spoilers-final-star-wars-episode-ever/", - "post_title": "636. James & Luke Discuss Star Wars IX (SPOILERS) Final Star Wars Episode Ever?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.609804Z", - "index": 2020011001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 635, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/01/08/635-a-new-year-ramble-for-2020-part-2-motivation-new-years-rules-bilingual-daughter-neil-innes/", - "post_title": "635. A New Year Ramble for 2020 (Part 2) Motivation / New Year\u2019s Rules / Bilingual Daughter / Neil Innes", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.602806Z", - "index": 2020010801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 634, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2020/01/06/634-a-new-year-ramble-for-2020-part-1/", - "post_title": "634. A New Year Ramble for 2020 (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.594809Z", - "index": 2020010601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 633, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/12/18/633-star-wars-ix-the-rise-of-skywalker-spoiler-review/", - "post_title": "633. Star Wars IX: The Rise of Skywalker (SPOILER REVIEW)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.587807Z", - "index": 2019121801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 632, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/12/17/632-star-wars-ix-the-rise-of-skywalker-no-spoilers/", - "post_title": "632. Star Wars IX: The Rise of Skywalker (No Spoilers!)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.579814Z", - "index": 2019121701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 631, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/12/16/631-29-awful-christmas-jokes-explained/", - "post_title": "631. 29 Awful Christmas Jokes, Explained", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.571817Z", - "index": 2019121601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 630, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/12/09/630-the-english-guy-with-a-sitcom-on-japanese-tv-with-bj-fox/", - "post_title": "630. The English Guy with a Sitcom on Japanese TV (with BJ Fox)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.563820Z", - "index": 2019120901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 629, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/12/02/629-do-you-ever-with-james-strange-habits-funny-observations/", - "post_title": "629. Do you ever \u2026 ? (with James) Strange Habits & Funny Observations", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.556821Z", - "index": 2019120201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 628, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/11/26/628-oasis-with-james/", - "post_title": "628. OASIS (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.547820Z", - "index": 2019112601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 627, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/11/19/627-eminas-long-journey-to-english-proficiency/", - "post_title": "627. Emina\u2019s Long Journey to English Proficiency", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.539822Z", - "index": 2019111901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 626, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/11/13/626-the-rick-thompson-report-boris-johnsons-brexit-deal-general-election-football/", - "post_title": "626. The Rick Thompson Report: Boris Johnson\u2019s Brexit Deal / General Election / Football", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.529830Z", - "index": 2019111302, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 625, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/11/13/625-88-english-expressions-that-will-confuse-everyone-part-2/", - "post_title": "625. 88 English expressions that will confuse everyone (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.522833Z", - "index": 2019111301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 624, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/11/07/624-88-english-expressions-that-will-confuse-everyone-part-1/", - "post_title": "624. 88 English expressions that will confuse everyone (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.514836Z", - "index": 2019110701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 623, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/10/29/623-13-terrible-jokes-explained/", - "post_title": "623. 13 Terrible Jokes, Explained", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.507837Z", - "index": 2019102901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 622, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/10/22/422-general-ramble-oct-2019-learning-english-politics-recording-setup-book-recommendation-beatles-star-wars-bill-bailey/", - "post_title": "622. General Ramble (Oct 2019) Learning English / Politics / Recording Setup / Book Recommendation / Beatles / Star Wars / Bill Bailey", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.500841Z", - "index": 2019102201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 621, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/10/14/621-british-tv-dragons-den-part-3-discord-in-the-den/", - "post_title": "621. British TV: Dragons\u2019 Den (Part 3) Discord in the Den", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.492842Z", - "index": 2019101401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 620, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/10/11/620-british-tv-dragons-den-part-2-negotiation/", - "post_title": "620. British TV: Dragons\u2019 Den (Part 2) Negotiation", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.485844Z", - "index": 2019101101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 619, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/10/09/619-british-tv-dragons-den-part-1-vocabulary/", - "post_title": "619. British TV: Dragons\u2019 Den (Part 1) Vocabulary", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.477847Z", - "index": 2019100901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 618, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/09/30/618-the-climate-crisis-explained-in-10-charts-with-cara-leopold/", - "post_title": "618. The Climate Crisis Explained in 10 Charts (with Cara Leopold)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.469850Z", - "index": 2019093001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 617, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/09/26/617-sales-and-advertising-with-paul-taylor/", - "post_title": "617. Sales and Advertising (with Paul Taylor)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.461852Z", - "index": 2019092601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 616, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/09/23/616-can-you-find-the-15-idioms-with-paul-taylor/", - "post_title": "616. Can you find the 15 idioms? (with Paul Taylor)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.454856Z", - "index": 2019092301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 615, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/09/17/615-paul-taylor-became-a-dad-and-you-wont-believe-what-happened-next/", - "post_title": "615. Paul Taylor Became a Dad, and you won\u2019t believe what happened next", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.446858Z", - "index": 2019091701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 614, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/09/13/614-another-murder-mystery-detective-story-part-3/", - "post_title": "614. Another Murder Mystery Detective Story (Part 3)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.439860Z", - "index": 2019091301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 613, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/09/09/613-another-murder-mystery-detective-story-part-2/", - "post_title": "613. Another Murder Mystery Detective Story (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.430858Z", - "index": 2019090901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 612, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/09/06/612-another-murder-mystery-detective-story-part-1/", - "post_title": "612. Another Murder Mystery Detective Story (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.422860Z", - "index": 2019090601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 611, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/09/03/611-top-10-jokes-from-edinburgh-fringe-2019/", - "post_title": "611. Top 10 Jokes from Edinburgh Fringe 2019", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.415864Z", - "index": 2019090301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 610, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/08/30/610-british-comedy-james-acaster/", - "post_title": "610. British Comedy: James Acaster", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.407870Z", - "index": 2019083001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 609, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/08/28/609-the-lep-meetup-in-london-brexit-talking-to-my-daughter/", - "post_title": "609. The LEP MeetUp in London / Brexit / Talking to my Daughter", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.400873Z", - "index": 2019082801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 608, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/08/21/608-the-mass-observation-with-mum/", - "post_title": "608. The Mass Observation (with Mum)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.392875Z", - "index": 2019082101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 607, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/08/09/607-the-rick-thompson-report-boris-johnson-pm-no-deal-brexit/", - "post_title": "607. The Rick Thompson Report: Boris Johnson PM / No Deal Brexit?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.384874Z", - "index": 2019080901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 606, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/07/25/606-the-english-seaside-with-james/", - "post_title": "606. The English Seaside (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.376880Z", - "index": 2019072501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 605, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/07/18/605-unexpected-road-trip-with-james/", - "post_title": "605. Unexpected Road Trip (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.369878Z", - "index": 2019071801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 604, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/07/05/604-london-native-speaker-interviews-revisited-part-2/", - "post_title": "604. London Native Speaker Interviews REVISITED Part 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.360881Z", - "index": 2019070501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 603, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/07/01/603-queen-freddie-mercury-bohemian-rhapsody/", - "post_title": "603. Queen / Freddie Mercury / Bohemian Rhapsody", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.353889Z", - "index": 2019070101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 602, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/06/27/602-british-comedy-the-day-today-part-2/", - "post_title": "602. British Comedy: The Day Today (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.344891Z", - "index": 2019062701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 601, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/06/24/601-british-comedy-the-day-today-part-1/", - "post_title": "601. British Comedy: The Day Today (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.337893Z", - "index": 2019062401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/06/18/quick-hello-opp-living-through-comedy-somewhere-else-dreamin/", - "post_title": "Quick Hello / OPP / Living Through Comedy / Somewhere Else Dreamin\u2019", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.329896Z", - "index": 2019061801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 600, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/06/08/600-episode-600-youtube-livestream-ask-me-anything/", - "post_title": "600. Episode 600 YouTube Livestream \u2013 Ask Me Anything", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.322894Z", - "index": 2019060801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 599, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/06/03/599-oliver-gee-returns-with-stories-to-tell/", - "post_title": "599. Oliver Gee Returns with Stories to Tell", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.314901Z", - "index": 2019060301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 598, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/05/28/598-the-rick-thompson-report-eu-elections-theresa-may-brexit-football/", - "post_title": "598. The Rick Thompson Report: EU Elections / Theresa May / Brexit / Football", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.307903Z", - "index": 2019052801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/05/27/hello-here-are-the-details-of-the-episode-600-youtube-live-stream/", - "post_title": "Hello! Here are the details of the Episode 600 YouTube live stream", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.299906Z", - "index": 2019052701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 597, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/05/23/597-growing-up-getting-older-becoming-a-father-with-paul-taylor/", - "post_title": "597. Growing Up / Getting Older / Becoming a Father (with Paul Taylor)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.292910Z", - "index": 2019052301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 596, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/05/20/596-sleep-with-amber-paul/", - "post_title": "596. SLEEP with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.284906Z", - "index": 2019052001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 595, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/05/15/595-andy-johnson-returns-part-2-eating-tv-series-football-music/", - "post_title": "595. Andy Johnson Returns (Part 2) Eating / TV Series / Football / Music", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.276914Z", - "index": 2019051501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 594, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/05/13/594-andy-johnson-returns-part-1-moving-house-london-vs-canterbury-english-teaching/", - "post_title": "594. Andy Johnson Returns (Part 1) Moving House / London vs Canterbury / English Teaching", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.269915Z", - "index": 2019051301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 593, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/05/10/593-going-through-pages-in-an-old-diary/", - "post_title": "593. Going through pages in an old diary", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.261918Z", - "index": 2019051001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 592, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/05/07/592-it-always-seems-impossible-until-its-done/", - "post_title": "592. It always seems impossible until it\u2019s done", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.253921Z", - "index": 2019050701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 591, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/04/29/591-london-native-speaker-interviews-revisited-part-1/", - "post_title": "591. London Native Speaker Interviews REVISITED (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.245924Z", - "index": 2019042901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 590, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/04/24/590-film-club-avengers-endgame-marvel-cinematic-universe-with-fred-eyangoh/", - "post_title": "590. [2/2] Film Club: Avengers Endgame / Marvel Cinematic Universe (with Fred Eyangoh)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.238926Z", - "index": 2019042401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 589, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/04/23/589-film-club-avengers-endgame-marvel-cinematic-universe-with-fred-eyangoh/", - "post_title": "589. Film Club: Avengers Endgame / Marvel Cinematic Universe (with Fred Eyangoh)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.230928Z", - "index": 2019042301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 588, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/04/19/588-punctuation-rules-book-review-part-2-apostrophe-full-stop-comma/", - "post_title": "588. Punctuation Rules / Book Review (Part 2) Apostrophe, Full Stop, Comma", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.223930Z", - "index": 2019041901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 587, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/04/18/587-punctuation-rules-book-review-part-1/", - "post_title": "587. Punctuation Rules / Book Review (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.215929Z", - "index": 2019041801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/04/12/its-leps-10th-birthday/", - "post_title": "It\u2019s LEP\u2019s 10th Birthday!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.207931Z", - "index": 2019041201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 586, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/04/06/586-the-importance-of-listening/", - "post_title": "586. The Importance of Listening", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.200938Z", - "index": 2019040601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 585, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/03/29/585-alternative-british-citizenship-tests-with-paul-taylor/", - "post_title": "585. Alternative British Citizenship Tests with Paul Taylor", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.192936Z", - "index": 2019032901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 584, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/03/25/584-posh-or-not-posh-part-3-with-amber-paul/", - "post_title": "584. Posh or not posh? (Part 3) with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.185938Z", - "index": 2019032501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 583, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/03/20/583-british-comedy-the-dirty-fork-restaurant-sketch-monty-python/", - "post_title": "583. British Comedy: The Dirty Fork / Restaurant Sketch (Monty Python)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.177945Z", - "index": 2019032001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 582, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/03/15/582-posh-or-not-posh-part-2-guess-the-posh-british-celebrities/", - "post_title": "582. Posh or not posh? (Part 2) Guess the Posh British Celebrities", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.170950Z", - "index": 2019031501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 581, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/03/13/581-posh-or-not-posh-part-1-understanding-posh-people-and-posh-accents/", - "post_title": "581. Posh or not posh? (Part 1) Understanding Posh People and Posh Accents", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.162952Z", - "index": 2019031301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 580, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/03/08/580-ramble-listener-comments-robots-vampires-two-taps-in-the-bathroom/", - "post_title": "580. Ramble / Listener Comments / Robots / Vampires / Two Taps in the Bathroom", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.155955Z", - "index": 2019030801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 579, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/03/01/579-2-2-ielts-qa-with-ben-worthington-from-ielts-podcast/", - "post_title": "579. [2/2] IELTS Q&A with Ben Worthington from IELTS Podcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.146958Z", - "index": 2019030101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 578, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/02/28/578-1-2-ielts-qa-with-ben-worthington-from-ielts-podcast/", - "post_title": "578. [1/2] IELTS Q&A with Ben Worthington from IELTS Podcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.139960Z", - "index": 2019022801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 577, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/02/14/577-uk-vs-us-slang-game-with-jennifer-from-english-across-the-pond/", - "post_title": "577. UK vs US Slang Game (with Jennifer from English Across the Pond)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.131956Z", - "index": 2019021401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/02/05/website-post-i-was-on-the-rock-roll-english-podcast-again-new-premium-episodes-coming-throughout-february/", - "post_title": "[Website post] I was on the Rock & Roll English Podcast again / New Premium episodes coming throughout February", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.124963Z", - "index": 2019020501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 576, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/02/02/576-talking-about-comedy-books-films-music-with-james/", - "post_title": "576. Talking about Comedy, Books, Films & Music with James", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.116966Z", - "index": 2019020201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 575, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/01/30/575-british-comedy-paul-chowdhry/", - "post_title": "575. British Comedy: Paul Chowdhry", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.109963Z", - "index": 2019013001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 574, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/01/25/574-2-2-the-rick-thompson-report-brexit-qa-january-2019/", - "post_title": "574. [2/2] The Rick Thompson Report: Brexit Q&A (January 2019)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.101966Z", - "index": 2019012502, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 573, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/01/25/573-1-2-the-rick-thompson-report-brexit-update-january-2019/", - "post_title": "573. [1/2] The Rick Thompson Report: Brexit Update (January 2019)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.093973Z", - "index": 2019012501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 572, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/01/20/572-worst-stand-up-gig-experiences-with-amber-paul/", - "post_title": "572. Worst Stand-up Gig Experiences (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.086975Z", - "index": 2019012001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 571, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/01/16/571-bill-burrs-hilarious-plane-story-enjoy-comedy-storytelling-in-english/", - "post_title": "571. Bill Burr\u2019s Hilarious Plane Story \u2013 Enjoy Comedy/Storytelling in English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.078978Z", - "index": 2019011601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 570, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/01/11/570-learning-teaching-english-with-zdenek-lukas-part-2/", - "post_title": "570. Learning & Teaching English with Zdenek Lukas (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.071980Z", - "index": 2019011102, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 569, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/01/11/569-learning-teaching-english-with-zdenek-lukas-part-1/", - "post_title": "569. Learning & Teaching English with Zdenek Lukas (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.063983Z", - "index": 2019011101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 568, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2019/01/07/568-what-is-lukes-english-podcast-and-how-can-it-help-you-with-your-english/", - "post_title": "568. What is Luke\u2019s English Podcast, and how can it help you with your English?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.055985Z", - "index": 2019010701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 567, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/12/21/567-alternative-christmas-stories-poems-beatles-happy-new-year-from-lep/", - "post_title": "567. Alternative Christmas Stories & Poems / Beatles / Happy New Year from LEP!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.047988Z", - "index": 2018122101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 566, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/12/19/566-the-collins-words-of-the-year-part-6-2018-with-amber-minogue/", - "post_title": "566. The Collins Words of the Year (Part 6) 2018 with Amber Minogue", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.040991Z", - "index": 2018121901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 565, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/12/17/565-the-collins-words-of-the-year-part-5-2018-with-amber-minogue/", - "post_title": "565. The Collins Words of the Year (Part 5) 2018 with Amber Minogue", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.033988Z", - "index": 2018121701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 564, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/12/13/564-the-collins-words-of-the-year-part-4/", - "post_title": "564. The Collins Words of the Year (Part 4)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.025990Z", - "index": 2018121301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 563, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/12/11/563-the-collins-words-of-the-year-part-3/", - "post_title": "563. The Collins Words of the Year (Part 3)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.018994Z", - "index": 2018121101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 562, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/12/10/562-the-collins-words-of-the-year-part-2/", - "post_title": "562. The Collins Words of the Year (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.010996Z", - "index": 2018121001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 561, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/12/07/561-the-collins-words-of-the-year-part-1/", - "post_title": "561. The Collins Words of the Year (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:30.002998Z", - "index": 2018120701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 560, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/12/03/560-sarah-donnelly-returns-writing-jokes-public-speaking-doing-comedy-in-another-language/", - "post_title": "560. Sarah Donnelly Returns \u2013 Writing jokes, public speaking, doing comedy in another language", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.996000Z", - "index": 2018120301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 559, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/11/20/559-the-rick-thompson-report-brexit-chaos-november-2018/", - "post_title": "559. The Rick Thompson Report: Brexit Chaos (November 2018)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.988003Z", - "index": 2018112001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 558, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/11/15/558-rambling-in-the-new-sky-pod/", - "post_title": "558. Rambling in the new Sky-Pod", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.980006Z", - "index": 2018111501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/11/09/a-letter-from-luke-9-nov-2018/", - "post_title": "A Letter from Luke \u2013 9 Nov. 2018", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.973063Z", - "index": 2018110901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 557, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/10/29/557-im-a-rambling-guy-monologue-autumn-2018/", - "post_title": "557. I\u2019m a Rambling Guy (Monologue \u2013 Autumn 2018)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.965067Z", - "index": 2018102901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 556, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/10/24/556-with-jessica-beck-from-honestly-english/", - "post_title": "556. With Jessica Beck from Honestly English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.958068Z", - "index": 2018102401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 555, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/10/22/555-raphael-millers-summer-school-report/", - "post_title": "555. Raphael Miller\u2019s Summer School Report", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.950067Z", - "index": 2018102201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 554, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/10/18/554-odd-news-stories-with-mum-dad/", - "post_title": "554. ODD NEWS STORIES (with Mum & Dad)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.942073Z", - "index": 2018101801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 553, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/10/15/553-fighting-wildland-fires-with-benny-the-russian-firefighter/", - "post_title": "553. Fighting Wildland Fires with Benny the Russian Firefighter", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.935076Z", - "index": 2018101501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 552, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/10/05/552-discussing-comedy-culture-with-amber-paul/", - "post_title": "552. Discussing Comedy & Culture (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.927078Z", - "index": 2018100501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 551, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/10/01/551-catching-up-with-amber-paul-8-stereotypes/", - "post_title": "551. Catching Up with Amber & Paul #8 \u2013 Stereotypes", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.920082Z", - "index": 2018100101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 550, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/09/28/550-british-comedy-alan-partridge-part-3/", - "post_title": "550. British Comedy: Alan Partridge (Part 3)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.912078Z", - "index": 2018092801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 549, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/09/26/549-british-comedy-alan-partridge-part-2/", - "post_title": "549. British Comedy: Alan Partridge (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.905081Z", - "index": 2018092601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 548, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/09/25/548-british-comedy-alan-partridge-part-1/", - "post_title": "548. British Comedy: Alan Partridge (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.896088Z", - "index": 2018092501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 547, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/09/19/547-best-jokes-from-the-edinburgh-festival-fringe/", - "post_title": "547. Best Jokes from the Edinburgh Festival Fringe", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.889091Z", - "index": 2018091901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 546, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/09/11/546-death-by-meteor/", - "post_title": "546. Death by Meteor", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.881094Z", - "index": 2018091101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 545, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/09/07/545-the-hitchhiker-by-roald-dahl-short-story/", - "post_title": "545. The Hitchhiker by Roald Dahl (Short Story)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.874091Z", - "index": 2018090701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 544, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/08/27/544-the-rick-thompson-report-no-deal-brexit/", - "post_title": "544. The Rick Thompson Report: No Deal Brexit", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.866095Z", - "index": 2018082701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 543, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/08/23/543-britains-first-insect-restaurant-opens/", - "post_title": "543. Britain\u2019s First Insect Restaurant Opens", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.858102Z", - "index": 2018082301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 542, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/08/21/542-talking-rubbish-just-having-fun-with-the-thompsons/", - "post_title": "542. Talking Rubbish & Just Having Fun with The Thompsons", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.850104Z", - "index": 2018082101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 541, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/07/31/541-what-british-people-say-vs-what-they-mean/", - "post_title": "541. What British People Say vs What They Mean", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.842107Z", - "index": 2018073101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 540, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/07/21/540-whats-up-post-world-cup-news-lep-meetup-london-super-mario-earworms/", - "post_title": "540. What\u2019s Up? Post World Cup / News / LEP Meetup London / Super Mario Earworms", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.834109Z", - "index": 2018072101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 539, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/07/09/539-world-cup-2018-3-is-it-coming-home/", - "post_title": "539. World Cup 2018 [3] Is It Coming Home?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.826112Z", - "index": 2018070901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 538, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/07/05/538-world-cup-2018-2-the-second-round-listener-comments/", - "post_title": "538. World Cup 2018 [2] The Second Round / Listener Comments", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.819110Z", - "index": 2018070501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 537, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/07/02/537-how-olly-richards-learns-a-language-part-2-intermediate-plateau-the-magic-of-story-pronunciation-personality-classroom-vs-self-guided-learning/", - "post_title": "537. How Olly Richards Learns a Language (Part 2) Intermediate Plateau / The Magic of Story / Pronunciation & Personality / Classroom vs Self-Guided Learning", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.811111Z", - "index": 2018070201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 536, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/06/29/536-how-olly-richards-learns-a-language-part-1-compelling-material-input-based-learning/", - "post_title": "536. How Olly Richards Learns a Language (Part 1) Compelling Material / Input-based Learning", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.804114Z", - "index": 2018062901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 535, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/06/26/535-world-cup-2018-1/", - "post_title": "535. World Cup 2018 [1]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.796116Z", - "index": 2018062601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/06/22/lep-premium-is-now-live-teacherluke-co-uk-premium/", - "post_title": "LEP PREMIUM is now live \u2013 teacherluke.co.uk/premium", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.789119Z", - "index": 2018062201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 534, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/06/15/534-sugar-sammy-interview-part-2-language-comedy/", - "post_title": "534. Sugar Sammy Interview (Part 2) Language & Comedy", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.781122Z", - "index": 2018061501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 533, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/06/13/533-sugar-sammy-interview-part-1-multilingual-comedian/", - "post_title": "533. Sugar Sammy Interview (Part 1) Multilingual Comedian", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.774129Z", - "index": 2018061301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 532, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/06/08/532-a-history-of-the-world-cup/", - "post_title": "532. A History of The World Cup", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.766128Z", - "index": 2018060801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 531, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/06/06/531-crime-vocabulary-quiz-with-moz/", - "post_title": "531. Crime Vocabulary Quiz (with Moz)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.758129Z", - "index": 2018060601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 530, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/06/03/530-more-murder-stories-with-moz/", - "post_title": "530. More Murder Stories (with Moz)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.751132Z", - "index": 2018060301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 529, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/05/29/529-the-m-word-with-andy-johnson/", - "post_title": "529. The \u201cM\u201d Word (with Andy Johnson)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.743134Z", - "index": 2018052901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 528, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/05/23/528-the-royal-wedding-with-mum/", - "post_title": "528. The Royal Wedding (with Mum)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.736137Z", - "index": 2018052301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 527, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/05/18/527-can-paul-taylor-pass-the-uk-citizenship-test/", - "post_title": "527. Can Paul Taylor Pass The UK Citizenship Test?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.728140Z", - "index": 2018051801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 526, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/05/15/526-being-a-tourist-with-paul-taylor/", - "post_title": "526. Being a Tourist (with Paul Taylor) + Video", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.720142Z", - "index": 2018051501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/05/14/31807/", - "post_title": "Please VOTE for LEP in the British Podcast Awards 2018 \u2013 Voting Ends on Thursday 17 May", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.712150Z", - "index": 2018051401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 525, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/05/08/525-ninja-august-podcast-corrections-useful-japanese-cat-listener-comments-questions/", - "post_title": "525. Ninja August / Podcast Corrections / Useful Japanese Cat (Listener Comments & Questions)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.705151Z", - "index": 2018050801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 524, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/05/04/524-tricky-pronunciation-debates-either-neither-grammar-nazi-sketch/", - "post_title": "524. Tricky Pronunciation Debates / \u201cEither\u201d \u201cNeither\u201d / Song + Comedy Sketch", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.697154Z", - "index": 2018050401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 523, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/04/24/523-tips-for-learning-english-with-films-tv-shows-with-cara-leopold/", - "post_title": "523. Tips for Learning English with Films & TV Shows (with Cara Leopold)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.690156Z", - "index": 2018042401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 522, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/04/18/522-learning-english-at-summer-school-in-the-uk-a-rambling-chat-with-raphael-miller/", - "post_title": "522. Learning English at Summer School in the UK (A Rambling Chat with Raphael Miller)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.682155Z", - "index": 2018041801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 521, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/04/13/520-talking-about-pets-with-james/", - "post_title": "521. Talking about Pets (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.675161Z", - "index": 2018041301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 520, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/04/03/520-idioms-game-chat-part-2-with-andy-johnson-18-more-idioms-vocab-items-explained/", - "post_title": "520. Idioms Game & Chat Part 2 (with Andy Johnson) + 18 More Idioms & Vocab Items Explained", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.667159Z", - "index": 2018040301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 519, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/03/29/519-idioms-game-chat-with-andy-johnson-25-idioms-explained/", - "post_title": "519. Idioms Game & Chat (with Andy Johnson) + 25 Idioms Explained", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.659162Z", - "index": 2018032901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 518, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/03/21/518-grammar-questions-part-1-present-perfect-continuous-future-continuous-language-of-newspaper-headlines/", - "post_title": "518. Grammar Questions (Part 1) Present Perfect Continuous / Future Continuous / Language of Newspaper Headlines", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.652164Z", - "index": 2018032101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 517, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/03/14/517-professor-stephen-hawking/", - "post_title": "517. Professor Stephen Hawking (An Obituary)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.644166Z", - "index": 2018031401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 516, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/03/10/516-paul-mccartneys-spider-story/", - "post_title": "516. Paul McCartney\u2019s Spider Story", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.637168Z", - "index": 2018031001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 515, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/03/06/515-becoming-maman-with-amber-sarah-bringing-up-children-the-french-way/", - "post_title": "515. Becoming \u201cMaman\u201d with Amber & Sarah \u2013 Bringing Up Children The French Way", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.629171Z", - "index": 2018030601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 514, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/03/01/514-whats-on-the-table-with-fred-alex/", - "post_title": "514. What\u2019s on the table? (with Fred & Alex)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.622173Z", - "index": 2018030101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 513, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/02/23/513-general-ramble-news-comments/", - "post_title": "513. General Ramble / News / Comments", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.614177Z", - "index": 2018022301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/02/21/website-only-i-was-on-the-becoming-maman-podcast-with-amber-minogue-sarah-donnelly/", - "post_title": "[Website-only] I was on the \u201cBecoming Maman\u201d podcast with Amber Minogue & Sarah Donnelly", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.606179Z", - "index": 2018022101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 512, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/02/16/512-my-experiences-of-not-learning-french-part-2-learning-language-in-a-classroom-vs-learning-on-your-own/", - "post_title": "512. My Experiences of (not) Learning French [Part 2] Learning Language in a Classroom vs Learning On Your Own", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.598182Z", - "index": 2018021601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 511, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/02/13/511-my-experiences-of-not-learning-french-part-1/", - "post_title": "511. My Experiences of (not) Learning French [Part 1]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.591183Z", - "index": 2018021301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 510, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/02/05/510-philosophy-quiz-with-amber-paul/", - "post_title": "510. Philosophy Quiz (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.584186Z", - "index": 2018020501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 509, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/02/01/509-whats-it-all-about-philosophy-and-language-learning/", - "post_title": "509. What\u2019s it all about? (Philosophy and Language Learning)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.575189Z", - "index": 2018020101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 508, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/01/27/508-six-true-crime-stories-from-victorian-england-told-by-my-dad/", - "post_title": "508. Six True Crime Stories from Victorian England, Told by My Dad", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.568191Z", - "index": 2018012701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 507, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/01/21/british-comedy-tv-shows-to-learn-english-some-british-comedy-tv-show-recommendations/", - "post_title": "507. Learning English with UK Comedy TV Shows", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.559195Z", - "index": 2018012101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 506, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/01/15/506-one-of-britains-favourite-poems/", - "post_title": "506. One of Britain\u2019s Favourite Poems", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.551197Z", - "index": 2018011501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 505, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/01/12/505-a-chat-with-dad-james-about-star-wars-the-last-jedi-with-vocabulary/", - "post_title": "505. A Chat with Dad & James about Star Wars: The Last Jedi (with Vocabulary)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.542200Z", - "index": 2018011201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 504, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/01/11/504-my-review-of-star-wars-the-last-jedi-part-2/", - "post_title": "504. My Review of Star Wars: The Last Jedi (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.532204Z", - "index": 2018011101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 503, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/01/10/503-my-review-of-star-wars-the-last-jedi-part-1/", - "post_title": "503. My Review of Star Wars: The Last Jedi (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.524212Z", - "index": 2018011001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 502, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2018/01/03/502-the-birth-of-my-daughter/", - "post_title": "502. The Birth of My Daughter", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.517209Z", - "index": 2018010301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 501, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/12/24/501-merry-christmas-listener-correspondence/", - "post_title": "501. Merry Christmas! / Listener Correspondence", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.508218Z", - "index": 2017122401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/12/22/observations-on-the-paris-metro-from-inside-the-metro-listen-to-my-appearance-on-oliver-gees-podcast-the-earful-tower/", - "post_title": "Observations on the Paris Metro\u2026 from Inside the Metro (Listen to my appearance on Oliver Gee\u2019s podcast \u201cThe Earful Tower\u201d)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.501213Z", - "index": 2017122201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 500, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/12/17/500-12-episode-500-celebration-part-1/", - "post_title": "500. EPISODE 500 CELEBRATION! (PARTS 1 & 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.493221Z", - "index": 2017121701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 499, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/12/11/499-prince-harry-meghan-markle-royal-family-quiz-with-amber/", - "post_title": "499. Prince Harry & Meghan Markle / Royal Family Quiz (with Amber)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.486219Z", - "index": 2017121101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 498, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/12/08/498-the-rick-thompson-report-brexit-negotiations/", - "post_title": "498. The Rick Thompson Report: Brexit Negotiations", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.476223Z", - "index": 2017120801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 497, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/12/04/497-film-club-withnail-i-with-james-and-will/", - "post_title": "497. Film Club: Withnail & I (with James and Will)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.469229Z", - "index": 2017120401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 496, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/11/29/496-ramblecast/", - "post_title": "496. RAMBLECAST", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.461232Z", - "index": 2017112901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 495, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/11/26/495-australian-stereotypes-and-cliches-with-oliver-gee-didgeridoo-sounds/", - "post_title": "495. Australian Stereotypes and Cliches (with Oliver Gee) ~didgeridoo sounds~", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.453234Z", - "index": 2017112601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 494, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/11/21/494-who-wants-to-be-good-at-english-the-rematch-with-rick-thompson/", - "post_title": "494. Who Wants to be Good at English? (The Rematch) with Rick Thompson", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.445232Z", - "index": 2017112101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 493, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/11/17/493-catching-up-with-amber-paul-7-human-pollution/", - "post_title": "493. Catching Up with Amber & Paul #7 (Human Pollution)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.438240Z", - "index": 2017111701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 492, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/11/12/492-becoming-a-dad-with-andy-ben-part-2/", - "post_title": "492. Becoming a Dad (with Andy & Ben) Part 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.430243Z", - "index": 2017111201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 491, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/11/08/491-becoming-a-dad-with-andy-ben-part-1/", - "post_title": "491. Becoming a Dad (with Andy & Ben) Part 1", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.423243Z", - "index": 2017110801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 490, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/11/03/490-discussing-friendship-with-martin-and-dan-the-man-from-rock-n-roll-english-friendship-phrasal-verbs/", - "post_title": "490. Discussing Friendship \u2013 with Martin and Dan The Man from Rock n\u2019 Roll English (Friendship Phrasal Verbs)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.416247Z", - "index": 2017110301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 489, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/10/30/489-a-rambling-conversation-with-mum-part-2-vocabulary/", - "post_title": "489. A Rambling Conversation with Mum (Part 2) + Vocabulary", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.408244Z", - "index": 2017103001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 488, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/10/26/488-a-rambling-conversation-with-mum-part-1-vocabulary/", - "post_title": "488. A Rambling Conversation with Mum (Part 1) + Vocabulary", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.401251Z", - "index": 2017102601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 487, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/10/22/487-learning-languages-and-adapting-to-new-cultures-with-ethan-from-reallife-english/", - "post_title": "487. Learning Languages and Adapting to New Cultures (with Ethan from RealLife English)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.393253Z", - "index": 2017102201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 485, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/10/13/difficult-words-to-pronounce-in-english-with-paul-taylor/", - "post_title": "485. & 486. Difficult Words to Pronounce in English (with Paul Taylor) (Parts 1 & 2) + video", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.386256Z", - "index": 2017101301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 484, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/10/08/484-try-not-to-laugh-on-the-bus-with-paul-taylor/", - "post_title": "484. Try not to Laugh on the Bus (with Paul Taylor)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.378259Z", - "index": 2017100801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/10/04/the-flat-earth-podcast-and-this-is-what-happened/", - "post_title": "I was invited onto The Flat Earth Podcast, and this is what happened\u2026 [Website only]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.371261Z", - "index": 2017100401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 483, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/10/01/483-a-rambling-chat-with-moz/", - "post_title": "483. A Rambling Chat with Moz", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.362263Z", - "index": 2017100101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 482, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/26/482-the-murder-mile-true-crime-podcast-with-moz-more-creepy-stories-of-murders-in-london/", - "post_title": "482. The Murder Mile True Crime Podcast (with Moz) More Creepy Stories of Murders in London", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.354262Z", - "index": 2017092601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/24/website-content-luke-on-the-real-life-english-podcast/", - "post_title": "[Website content] Luke on the RealLife English Podcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.346265Z", - "index": 2017092401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 481, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/20/481-holiday-diary-final-part-endeavour-to-persevere/", - "post_title": "481. Holiday Diary (Final Part) \u201cEndeavour to Persevere\u201d", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.338272Z", - "index": 2017092001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 480, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/18/480-holiday-diary-part-7-big-rocks/", - "post_title": "480. Holiday Diary (Part 7) BIG ROCKS!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.331274Z", - "index": 2017091801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 479, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/15/479-holiday-diary-part-6-the-madness-of-las-vegas-11-gambling-idioms/", - "post_title": "479. Holiday Diary (Part 6) The Madness of Las Vegas / 11 Gambling Idioms", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.323277Z", - "index": 2017091501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 478, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/12/478-holiday-diary-part-5-an-encounter-with-the-church-of-scientology/", - "post_title": "478. Holiday Diary (Part 5) An Encounter with The Church of Scientology", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.316278Z", - "index": 2017091201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 477, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/09/477-holiday-diary-part-4-the-fresh-prince-of-bel-air/", - "post_title": "477. Holiday Diary (Part 4) The Fresh Prince of Bel Air", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.308282Z", - "index": 2017090901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 476, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/03/476-holiday-diary-part-3-astronomy-astrology-flat-earth-conspiracy-theory/", - "post_title": "476. Holiday Diary (Part 3) Astronomy, Astrology & Flat Earth Conspiracy Theory", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.301285Z", - "index": 2017090302, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 475, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/09/03/475-holiday-diary-part-2-modern-art-is-it-amazing-or-is-it-rubbish/", - "post_title": "475. Holiday Diary (Part 2) Modern Art: Is it amazing, or is it rubbish?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.293286Z", - "index": 2017090301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 474, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/08/31/474-holiday-diary-part-1/", - "post_title": "474. Holiday Diary (Part 1) New Arrival, New Destinations", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.286288Z", - "index": 2017083101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 473, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/08/22/473-explaining-the-rules-of-cricket-with-dad/", - "post_title": "473. Explaining the Rules of Cricket (with Dad)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.213313Z", - "index": 2017082201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/08/18/website-only-star-wars-dvd-commentary-with-james/", - "post_title": "[Website Only] Star Wars DVD Commentary (with James) ***Contains swearing \u2013 Not suitable for Children***", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.205315Z", - "index": 2017081801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/08/15/why-does-the-uk-have-so-many-accents-recorded-february-2017/", - "post_title": "Why does the UK have so many accents? (Recorded February 2017)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.197313Z", - "index": 2017081501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/08/14/website-content-lukes-criminal-past-zep-episode-185/", - "post_title": "Luke\u2019s Criminal Past (ZEP Episode 185)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.190516Z", - "index": 2017081401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 472, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/08/10/472-andy-johnson-at-the-london-school-of-english-part-2-why-andy-runs-marathons/", - "post_title": "472. Andy\u2019s Survival Story / Why Andy Runs Marathons (with Andy Johnson)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.182520Z", - "index": 2017081001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 471, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/08/06/471-andy-johnson-at-the-london-school-of-english-part-1-lego-self-directed-learning-accents/", - "post_title": "471. Stepping on Lego, Self-directed Learning, Accents (with Andy Johnson)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.174521Z", - "index": 2017080601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/08/02/ive-got-something-to-tell-you-im-leaving/", - "post_title": "I\u2019m going on holiday \u2013 back in a few weeks!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.167524Z", - "index": 2017080201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 470, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/07/31/470-understanding-the-liverpool-accent/", - "post_title": "470. Understanding the Liverpool Accent", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.159533Z", - "index": 2017073101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 469, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/07/27/469-british-comedy-john-bishop/", - "post_title": "469. British Comedy: John Bishop", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.152533Z", - "index": 2017072701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 468, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/07/24/468-punk-music-culture-with-james/", - "post_title": "468. Punk \u2013 Music & Culture (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.144531Z", - "index": 2017072401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 467, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/07/20/467-a-boiling-hot-evening-ramble-comments-questions/", - "post_title": "467. A Boiling-Hot Evening Ramble \u2013 Comments & Questions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.137534Z", - "index": 2017072001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 466, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/07/15/466-get-this-word-into-your-life/", - "post_title": "466. Get this word into your life", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.129536Z", - "index": 2017071501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 465, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/07/10/465-how-i-make-episodes-of-the-podcast-part-2/", - "post_title": "465. How I make episodes of the podcast (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.121545Z", - "index": 2017071001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 464, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/07/06/464-how-i-make-episodes-of-the-podcast-part-1/", - "post_title": "464. How I make episodes of the podcast (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.113548Z", - "index": 2017070601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 463, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/07/03/463-news-comments-questions/", - "post_title": "463. News, Comments & Questions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.106548Z", - "index": 2017070301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 462, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/28/462-british-comedy-bill-bailey/", - "post_title": "462. British Comedy: Bill Bailey", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.099547Z", - "index": 2017062801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 461, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/24/461-25-deceptively-difficult-questions-with-amber-paul-sarah/", - "post_title": "461. 25 Deceptively Difficult Questions (with Amber, Paul & Sarah)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.091549Z", - "index": 2017062401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 460, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/20/460-catching-up-with-amber-paul-6-feat-sarah-donnelly/", - "post_title": "460. Catching Up With Amber & Paul #6 (feat. Sarah Donnelly)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.083557Z", - "index": 2017062001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 459, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/17/459-lazing-on-a-sunny-afternoon/", - "post_title": "459. Lazing on a Sunny Afternoon", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.075559Z", - "index": 2017061701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/15/i-was-on-the-rock-n-roll-english-podcast-and-the-earful-tower-podcast-this-week/", - "post_title": "[Website content] I was on The Rock n\u2019 Roll English Podcast and The Earful Tower Podcast this week", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.068562Z", - "index": 2017061501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 458, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/14/458-the-rick-thompson-report-post-election-2017/", - "post_title": "458. The Rick Thompson Report: Post-Election 2017", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.060563Z", - "index": 2017061401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 457, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/09/457-conclusions-about-language-learning-from-the-david-crystal-interview-part-2/", - "post_title": "457. Conclusions about Language Learning from the David Crystal Interview (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.053565Z", - "index": 2017060902, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 456, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/09/456-conclusions-about-language-learning-from-the-david-crystal-interview-part-1/", - "post_title": "456. Conclusions about Language Learning from the David Crystal Interview (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.045568Z", - "index": 2017060901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 455, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/06/455-david-crystal-interview-part-2-questions-from-listeners/", - "post_title": "455. David Crystal Interview (Part 2) Questions from Listeners", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.038571Z", - "index": 2017060601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/06/01/30029/", - "post_title": "A Message from Amber", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.030569Z", - "index": 2017060101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 454, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/31/454-david-crystal-interview-part-1-professor-of-linguistics/", - "post_title": "454. David Crystal Interview (Part 1) Professor of Linguistics", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.023576Z", - "index": 2017053101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 453, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/27/453-the-36-questions-that-lead-to-love-with-amber-paul/", - "post_title": "453. The 36 Questions that Lead to Love (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:29.015574Z", - "index": 2017052701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 452, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/24/452-a-conversation-about-language-with-amber-paul/", - "post_title": "452. A Conversation About Language (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.956597Z", - "index": 2017052401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 451, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/22/451-film-club-alien-covenant/", - "post_title": "451. Film Club: Alien Covenant", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.949596Z", - "index": 2017052201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 450, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/16/450-comments-questions/", - "post_title": "450. Comments & Questions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.941602Z", - "index": 2017051601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 449, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/13/449-film-club-touching-the-void-part-2/", - "post_title": "449. Film Club: Touching the Void (Part 2) Learning a Language is Like Climbing a Mountain", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.934600Z", - "index": 2017051301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 448, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/12/448-film-club-touching-the-void-part-1/", - "post_title": "448. Film Club: Touching The Void (Part 1) Learning a Language is Like Climbing a Mountain", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.926608Z", - "index": 2017051201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 447, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/08/447-what-is-this-british-humour/", - "post_title": "447. What is this, British Humour? (with Amber Minogue)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.919609Z", - "index": 2017050801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 446, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/05/446-british-tv-top-gear/", - "post_title": "446. British TV: Top Gear", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.911612Z", - "index": 2017050501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 445, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/05/01/445-british-podcast-award-hello-to-new-listeners-17-vocabulary-expressions/", - "post_title": "445. British Podcast Award / Hello to New Listeners / 17 Vocabulary Expressions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.904615Z", - "index": 2017050101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 444, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/04/25/444-the-rick-thompson-report-snap-general-election-2017/", - "post_title": "444. The Rick Thompson Report: Snap General Election 2017", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.896613Z", - "index": 2017042501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 443, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/04/21/443-the-trip-to-japan-part-2/", - "post_title": "443. The Trip to Japan (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.888622Z", - "index": 2017042102, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 442, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/04/21/442-the-trip-to-japan-part-1/", - "post_title": "442. The Trip to Japan (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.880625Z", - "index": 2017042101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 441, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/04/18/441-andy-johnson-at-the-iatefl-conference/", - "post_title": "441. Andy Johnson at the IATEFL Conference", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.873626Z", - "index": 2017041801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 440, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/04/06/440-this-pile-of-books-on-my-desk/", - "post_title": "440. This Pile of Books on my Desk", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.866623Z", - "index": 2017040602, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 439, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/04/06/439-reading-books-to-learn-english/", - "post_title": "439. Reading Books to Learn English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.857633Z", - "index": 2017040601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 438, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/04/04/438-hi-luke-i-have-a-question/", - "post_title": "438. Hi Luke, I have a question!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.850628Z", - "index": 2017040401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 437, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/31/437-ramble-news-31-march-2017/", - "post_title": "437. Ramble News \u2013 31 March 2017", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.841630Z", - "index": 2017033101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 436, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/28/436-the-return-of-the-lying-game-with-amber-paul-video/", - "post_title": "436. The Return of The Lying Game (with Amber & Paul) [Video]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.834634Z", - "index": 2017032801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/26/i-was-interviewed-on-my-fluent-podcast-with-daniel-goodson/", - "post_title": "I was interviewed on \u201cMy Fluent Podcast\u201d by Daniel Goodson", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.826640Z", - "index": 2017032601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 435, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/24/435-catching-up-with-amber-paul-5-video/", - "post_title": "435. Catching Up With Amber & Paul #5 [Video]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.818638Z", - "index": 2017032401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 434, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/21/434-interview-with-paul-taylor-wtf-france-video/", - "post_title": "434. Interview with Paul Taylor \u2013 \u201cWTF France?\u201d [Video]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.810647Z", - "index": 2017032101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 433, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/16/433-british-tv-gordon-ramsays-kitchen-nightmares-part-2-video/", - "post_title": "433. British TV: Gordon Ramsay\u2019s Kitchen Nightmares (Part 2) [Video]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.803648Z", - "index": 2017031601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 432, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/14/432-british-tv-gordon-ramsays-kitchen-nightmares-part-1-video/", - "post_title": "432. British TV: Gordon Ramsay\u2019s Kitchen Nightmares (Part 1) [Video]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.795650Z", - "index": 2017031401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 431, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/09/431-restaurants-hotels-really-strange-tripadvisor-reviews-with-amber/", - "post_title": "431. Restaurants & Hotels / Really Strange TripAdvisor Reviews (with Amber)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.720675Z", - "index": 2017030901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 430, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/05/430-discussing-language-learning-life-with-fred-eyangoh/", - "post_title": "430. Discussing Language Learning & Life with Fred Eyangoh", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.712677Z", - "index": 2017030501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 429, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/03/01/429-ramblenews/", - "post_title": "429. RAMBLENEWS!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.705680Z", - "index": 2017030101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 428, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/02/23/428-british-comedy-limmys-show-part-2/", - "post_title": "428. British Comedy: Limmy\u2019s Show (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.697678Z", - "index": 2017022301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 427, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/02/22/427-british-comedy-limmys-show/", - "post_title": "427. British Comedy: Limmy\u2019s Show", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.690680Z", - "index": 2017022201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 426, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/02/16/426-thompson-taylor-minogue-victorian-detectives-part-2-with-amber-paul/", - "post_title": "426. Thompson, Taylor & Minogue: Victorian Detectives (Part 2) with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.683683Z", - "index": 2017021601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 425, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/02/13/425/", - "post_title": "425. Thompson, Taylor & Minogue: Victorian Detectives (Part 1) with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.675690Z", - "index": 2017021301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 424, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/02/08/424-with-andy-ben-from-the-london-school-of-english-part-2/", - "post_title": "424. With Andy & Ben from The London School of English (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.667693Z", - "index": 2017020801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 423, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/02/06/423-teacher-talking-time-with-andy-ben-from-the-london-school-of-english-part-1/", - "post_title": "423. With Andy & Ben from The London School of English (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.660690Z", - "index": 2017020601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 422, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/02/02/422-learning-british-dialects-with-korean-billy/", - "post_title": "422. Learning British Dialects with Korean Billy", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.652698Z", - "index": 2017020201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 421, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/29/421-skateboarding-a-new-olympic-sport-with-james/", - "post_title": "421. Skateboarding \u2013 A New Olympic Sport (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.645701Z", - "index": 2017012901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 420, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/26/420-anyone-fancy-a-brew-lets-have-a-nice-cup-of-tea/", - "post_title": "420. Anyone fancy a brew? Let\u2019s have a nice cup of tea!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.637704Z", - "index": 2017012601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 419, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/23/419-rogue-one-a-star-wars-story-spoiler-ramble-with-james/", - "post_title": "419. Rogue One: A Star Wars Story \u2013 SPOILER RAMBLE with James", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.630705Z", - "index": 2017012301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 418, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/19/418-the-rick-thompson-report-technology-and-the-future-january-2017/", - "post_title": "418. The Rick Thompson Report: Technology and The Future (January 2017)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.623707Z", - "index": 2017011901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 417, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/15/417-new-years-resolutions-and-language-learning-in-2017/", - "post_title": "417. New Year\u2019s Resolutions and Language Learning in 2017", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.614710Z", - "index": 2017011501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 416, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/13/416-what-was-the-most-popular-episode-of-lep-in-2016-more-podcast-statistics/", - "post_title": "416. What was the most popular episode of LEP in 2016? + more podcast statistics", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.607712Z", - "index": 2017011301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 415, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/10/415-with-the-family-part-3-more-encounters-with-famous-people/", - "post_title": "415. With the Family (Part 3) More Encounters with Famous People", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.599716Z", - "index": 2017011001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 414, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/05/414-with-the-family-part-2-my-uncle-met-a-rock-star/", - "post_title": "414. With the Family (Part 2) My Uncle Met a Rock Star", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.591717Z", - "index": 2017010501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 413, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2017/01/03/413-with-the-family-part-1-mums-cooking-vocabulary-with-uncle-nic/", - "post_title": "413. With The Family (Part 1) Mum\u2019s Cooking + Vocabulary (with Uncle Nic)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.584715Z", - "index": 2017010301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 412, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/12/26/412-british-festivals-and-holidays-part-2/", - "post_title": "412. British Festivals and Holidays (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.576717Z", - "index": 2016122602, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 411, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/12/26/411-british-festivals-and-holidays-part-1/", - "post_title": "411. British Festivals and Holidays (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.569720Z", - "index": 2016122601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/12/22/a-quick-message-about-donations-please-consider-donating-to-doctors-without-borders-to-help-people-in-need/", - "post_title": "A Quick Message About Donations \u2013 Please consider donating to \u201cDoctors Without Borders\u201d to help people in need", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.561722Z", - "index": 2016122201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 410, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/12/20/410-teaching-12-idioms-in-the-street-on-the-set-of-pauls-tv-show-with-amber/", - "post_title": "410. Teaching 12 Idioms in the Street / On the Set of Paul\u2019s TV Show (with Amber)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.553725Z", - "index": 2016122001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 409, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/12/16/409-a-christmas-mega-ramble-with-amber-minogue/", - "post_title": "409. A CHRISTMAS MEGA-RAMBLE with AMBER MINOGUE", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.545728Z", - "index": 2016121601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 408, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/12/13/408-catching-up-with-amber-paul-4-videos/", - "post_title": "408. Catching Up With Amber & Paul #4 (+ videos)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.537730Z", - "index": 2016121301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 407, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/12/07/407-reflections-on-language-learning-working-as-a-translator-interview-with-kristina-from-russia-winner-of-the-lep-anecdote-competition-2016/", - "post_title": "407. Reflections on Language Learning & Working as a Translator: Interview with Kristina from Russia, Winner of the LEP Anecdote Competition 2016", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.528734Z", - "index": 2016120701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 406, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/12/04/406-grammar-past-continuous-tense-uk-media-bias-brazil-football-tragedy/", - "post_title": "406. Grammar (Past Continuous Tense) / UK Media Bias / Brazil Football Tragedy", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.520736Z", - "index": 2016120401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 405, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/30/405-british-accents-in-the-lord-of-the-rings-part-2/", - "post_title": "405. British Accents in The Lord of the Rings (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.513743Z", - "index": 2016113002, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 404, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/30/404-british-accents-in-the-lord-of-the-rings-part-1/", - "post_title": "404. British Accents in The Lord of the Rings (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.506741Z", - "index": 2016113001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 403, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/29/403-competition-results-war-story-grammar-my-dads-accent/", - "post_title": "403. Competition Results / War Story / Grammar & Punctuation / My Dad\u2019s Accent", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.498744Z", - "index": 2016112901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 402, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/23/402-the-rick-thompson-report-whats-going-on-nov-2016-post-truth-politics-cricket-and-tetris/", - "post_title": "402. The Rick Thompson Report: What\u2019s Going On? Nov. 2016 (Post-Truth Politics, Cricket and Tetris)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.490751Z", - "index": 2016112301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 401, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/21/401-switch-off-your-editor-to-improve-your-fluency-in-english/", - "post_title": "401. \u2018Switch off your editor\u2019 to improve your fluency in English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.483748Z", - "index": 2016112101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 400, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/18/400-the-pink-gorilla-story-2/", - "post_title": "400. The Pink Gorilla Story 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.475750Z", - "index": 2016111801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 399, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/15/399-the-return-of-molly-martinez-with-dane-nightingale/", - "post_title": "399. The Return of Molly Martinez (with Dane Nightingale)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.468754Z", - "index": 2016111501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 398, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/09/398-us-election-result-ramble-message-song/", - "post_title": "398. US Election Result Ramble + Message + Song", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.460755Z", - "index": 2016110901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 397, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/11/07/397-an-80-minute-ramble/", - "post_title": "397. An 80-Minute Ramble", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.453757Z", - "index": 2016110701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 396, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/28/396-the-lep-anecdote-competition-round-2/", - "post_title": "396. The LEP Anecdote Competition \u2013 ROUND 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.445760Z", - "index": 2016102801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 395, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/27/395-have-you-ever-with-paul-taylor-and-robert-hoehn/", - "post_title": "395. \u201cHave you ever\u2026?\u201d with Paul Taylor and Robert Hoehn", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.438762Z", - "index": 2016102701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 394, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/23/394-opp-other-peoples-podcasts-part-4/", - "post_title": "394. OPP: Other People\u2019s Podcasts (Part 4)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.430765Z", - "index": 2016102301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 393, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/22/393-opp-other-peoples-podcasts-part-3/", - "post_title": "393. OPP: Other People\u2019s Podcasts (Part 3)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.423767Z", - "index": 2016102201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 392, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/19/392-what-are-the-most-essential-skills-of-a-good-foreign-language-learner/", - "post_title": "392. What are the most essential skills of a good foreign language learner?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.415772Z", - "index": 2016101901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 391, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/17/391-discussing-language-culture-comedy-with-alexander-van-walsum/", - "post_title": "391. Discussing Language, Culture & Comedy with Alexander van Walsum", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.407773Z", - "index": 2016101701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 390, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/14/390-the-rick-thompson-report-hard-brexit-u-s-election/", - "post_title": "390. The Rick Thompson Report: Hard Brexit / U.S. Election", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.399776Z", - "index": 2016101401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 389, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/11/389-us-presidential-election-2016-trump-vs-clinton-with-sarah-sebastian-part-2/", - "post_title": "389. US Presidential Election 2016 \u2013 Trump vs Clinton (with Sarah & Sebastian) Part 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.391778Z", - "index": 2016101102, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 388, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/11/388-us-presidential-election-2016-trump-vs-clinton-with-sarah-and-sebastian/", - "post_title": "388. US Presidential Election 2016 \u2013 Trump vs Clinton (with Sarah & Sebastian) Part 1", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.384780Z", - "index": 2016101101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 387, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/07/387-lep-anecdote-competition-entries-please-listen-vote/", - "post_title": "387. LEP Anecdote Competition Entries \u2013 Please listen & vote", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.376783Z", - "index": 2016100701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 386, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/05/386-breaking-the-intermediate-plateau-part-2/", - "post_title": "386. Breaking the Intermediate Plateau (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.369786Z", - "index": 2016100502, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 385, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/10/05/385-breaking-the-intermediate-plateau-part-1/", - "post_title": "385. Breaking the Intermediate Plateau (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.361788Z", - "index": 2016100501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 384, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/30/384-teaching-grammar-social-english/", - "post_title": "384. Teaching Grammar & Social English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.354790Z", - "index": 2016093001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 383, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/27/383-more-ian-moore/", - "post_title": "383. More Ian Moore", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.345793Z", - "index": 2016092701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/23/please-take-my-survey-anecdote-competition-russian-joke-video/", - "post_title": "Please take my survey / Anecdote Competition / \u2018Russian Joke\u2019 Video", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.337795Z", - "index": 2016092301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 382, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/21/382-mod-culture-with-ian-moore/", - "post_title": "382. Mod Culture with Ian Moore", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.329798Z", - "index": 2016092101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 381, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/17/381-discussing-cultural-differences-with-amber-paul/", - "post_title": "381. Discussing Cultural Differences with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.322801Z", - "index": 2016091701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 380, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/12/380-catching-up-with-amber-and-paul-3/", - "post_title": "380. Catching Up with Amber and Paul #3", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.314803Z", - "index": 2016091201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 379, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/07/379-the-lep-anecdote-competition/", - "post_title": "379. The LEP Anecdote Competition", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.307806Z", - "index": 2016090701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 378, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/05/378-holiday-in-thailand-part-2/", - "post_title": "378. Holiday in Thailand (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.299809Z", - "index": 2016090501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 377, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/09/03/377-holiday-in-thailand/", - "post_title": "377. Holiday in Thailand (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.292811Z", - "index": 2016090301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/12/im-going-on-holiday-no-podcasts-for-a-while/", - "post_title": "I\u2019m going on holiday \u2013 no podcasts for a while", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.284814Z", - "index": 2016081204, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 376, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/12/376-a-game-of-mini-golf-and-a-pint-with-james/", - "post_title": "376. A Game of Mini Golf and a Pint (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.276816Z", - "index": 2016081203, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 375, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/12/375-the-lep-pub-quiz-with-alex-love/", - "post_title": "375. The LEP Pub Quiz (with Alex Love)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.269823Z", - "index": 2016081202, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 374, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/12/374-alexs-edinburgh-report/", - "post_title": "374. Alex\u2019s Edinburgh Fringe Report", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.261826Z", - "index": 2016081201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 373, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/10/373-who-wants-to-be-good-at-english/", - "post_title": "373. Who Wants to Be Good at English?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.254828Z", - "index": 2016081001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 372, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/09/372-the-importance-of-anecdotes-in-english-narrative-tenses-four-anecdotes", - "post_title": "372. The Importance of Anecdotes in English / Narrative Tenses / Four Anecdotes", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.246831Z", - "index": 2016080901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 371, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/07/371-in-conversation-with-rob-ager-from-liverpool-part-2-film-analysis-hidden-meanings-stanley-kubrick-conspiracy-theory/", - "post_title": "371. In Conversation with Rob Ager from Liverpool (PART 2: Film Analysis / Hidden Meanings / Stanley Kubrick / Conspiracy Theory)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.238828Z", - "index": 2016080702, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 369, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/03/389-pokemon-go-its-just-a-game-or-is-it/", - "post_title": "369. Pok\u00e9mon GO \u2013 It\u2019s just a game, OR IS IT?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.158855Z", - "index": 2016080301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 368, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/08/02/368-the-lep-annual-general-meeting-2016-questions/", - "post_title": "368. The LEP Annual General Meeting 2016 / QUESTIONS", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.150862Z", - "index": 2016080201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 367, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/07/31/367-talking-about-nothing-with-alex-love-invaded-by-robot-aliens-part-2/", - "post_title": "367. Talking about Nothing with Alex Love (Invaded by Robot Aliens) PART 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.142860Z", - "index": 2016073102, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 366, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/07/31/366-talking-about-nothing-with-alex-love-invaded-by-robot-aliens/", - "post_title": "366. Talking about Nothing with Alex Love (Invaded by Robot Aliens)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.135862Z", - "index": 2016073101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/07/27/quick-hello-notting-hill-carnival-audio/", - "post_title": "Quick Hello / Notting Hill Carnival Audio", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.127869Z", - "index": 2016072701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 365, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/07/17/365-brexit-3-weeks-later-a-conversation-with-my-dad/", - "post_title": "365. BREXIT: 3 Weeks Later (A conversation with my Dad)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.120872Z", - "index": 2016071701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 364, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/07/15/364-ten-top-tips-for-learning-english/", - "post_title": "364. TEN TOP TIPS for Learning English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.112874Z", - "index": 2016071501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 363, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/07/03/363-muhammad-ali-the-rumble-in-the-jungle/", - "post_title": "363. Muhammad Ali & The Rumble in the Jungle", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.105877Z", - "index": 2016070301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 362, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/28/362-getting-things-off-my-chest-part-2/", - "post_title": "362. Getting things off my chest! (Part 2) Brexit / Football", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.097875Z", - "index": 2016062802, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 361, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/28/361-getting-things-off-my-chest-part-1/", - "post_title": "361. Getting things off my chest! (Part 1) Brexit / Football", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.089877Z", - "index": 2016062801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 360, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/24/360-the-day-after-brexit-thoughts-and-feelings/", - "post_title": "360. THE DAY AFTER BREXIT (Thoughts and feelings)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.081880Z", - "index": 2016062402, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 359, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/24/359-brexit-jokes-eu-referendum-night/", - "post_title": "359. BREXIT JOKES / EU REFERENDUM NIGHT", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.073648Z", - "index": 2016062401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 358, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/23/358-fete-de-la-musique-world-music-festival-in-paris/", - "post_title": "358. F\u00eate de la Musique / World Music Festival in Paris", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.066652Z", - "index": 2016062301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 357, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/19/357-olly-richards/", - "post_title": "357. Learning Languages with Olly Richards", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.059090Z", - "index": 2016061901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 356, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/17/356-lep-meeting-football-brexit-events-in-the-uk-jo-cox/", - "post_title": "356. News / Football / Brexit / Events in the UK / Jo Cox", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.052096Z", - "index": 2016061701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 355, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/13/355-euro-2016-football-hooliganism-violence-in-marseille-england-vs-russia/", - "post_title": "355. EURO 2016 Football: Hooliganism & Violence in Marseille / England vs Russia", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.043099Z", - "index": 2016061301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 354, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/10/354-would-you-rather-with-amber-paul-james-simpson/", - "post_title": "354. Would You Rather\u2026? (with Amber, Paul & James Simpson)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.036101Z", - "index": 2016061001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 353, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/07/353-award-ceremony-paris-weather-crazy-idea/", - "post_title": "353. Award Ceremony / Paris Weather / Crazy Idea", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.028103Z", - "index": 2016060702, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 352, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/06/07/352-brexit-key-vocabulary-and-concepts/", - "post_title": "352. BREXIT: Key Vocabulary and Concepts", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.021106Z", - "index": 2016060701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 351, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/05/29/351-brexit-should-the-uk-leave-the-eu-a-conversation-with-my-dad/?w3tc_note=flush_all", - "post_title": "351. BREXIT: Should the UK leave the EU? (A Conversation with my Dad)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.013104Z", - "index": 2016052901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 350, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/05/26/350-x-men-apocalypse-film-review/", - "post_title": "350. Film Club: X-Men Apocalypse (Review)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:28.005106Z", - "index": 2016052601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 349, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/05/24/349-whos-the-best-superhero-with-paul-langton/", - "post_title": "349. Who\u2019s the best superhero? (with Paul Langton)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.997114Z", - "index": 2016052401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 348, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/05/19/348-marvel-superhero-movies-captain-america-civil-war-part-2/", - "post_title": "348. Film Club: Marvel / Captain America Civil War (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.990117Z", - "index": 2016051902, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 347, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/05/19/347-marvel-superhero-movies-captain-america-civil-war-part-1/", - "post_title": "347. Film Club: Marvel / Captain America Civil War (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.983115Z", - "index": 2016051901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 346, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/05/13/346-rambling-on-a-friday-afternoon/", - "post_title": "346. Rambling on a Friday Afternoon", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.975121Z", - "index": 2016051301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 345, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/05/11/345-elton-award-nomination-phrasal-verbs-idioms-brooklyn-the-revenant-museum-of-natural-history-more/", - "post_title": "345. ELTon Award Nomination / Phrasal Verbs & Idioms / Brooklyn / The Revenant / Museum of Natural History & More", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.968119Z", - "index": 2016051101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 344, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/04/22/344-a-totally-terrific-talk-on-the-terrace-with-the-tangential-trio-feat-tom-morton/", - "post_title": "344. A Totally Terrific Talk on the Terrace with The Tangential Trio (feat. Tom Morton) with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.960125Z", - "index": 2016042201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 343, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/04/20/the-interactive-lying-game/", - "post_title": "343. The Interactive Lying Game (with Amber & Paul) / Descriptive Adjectives with T / Three is a Magic Number", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.953128Z", - "index": 2016042001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 342, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/04/18/342-pauls-la-bise-video-success-audition-story-with-amber-paul/", - "post_title": "342. Paul\u2019s \u201cLa Bise\u201d Video Success / Audition Story (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.945125Z", - "index": 2016041801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 341, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/04/15/341-catching-up-with-amber-paul-again/", - "post_title": "341. Catching Up With Amber & Paul, Again", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.938128Z", - "index": 2016041501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 340, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/04/07/340-lep-photo-competition-results-winners-its-leps-7th-birthday/", - "post_title": "340. LEP Photo Competition Results & Winners / It\u2019s LEP\u2019s 7th Birthday", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.929131Z", - "index": 2016040701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 339, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/04/03/339-a-murder-mystery-detective-story-part-2/", - "post_title": "339. A Murder Mystery Detective Story (Part 2 of 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.922133Z", - "index": 2016040301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 338, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/31/338-a-murder-mystery-detective-story/", - "post_title": "338. A Murder Mystery Detective Story (Part 1 of 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.914136Z", - "index": 2016033101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/24/i-was-interviewed-by-olly-richards-on-his-podcast-called-i-will-teach-you-a-language-and-we-talked-about-language-learning/", - "post_title": "I was interviewed by Olly Richards on his podcast, called \u201cI Will Teach You a Language\u201d and we talked about language learning", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.907138Z", - "index": 2016032401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 337, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/23/337-murder-mile-walks-stories-of-londons-most-infamous-shocking-murders-some-explicit-content-swearing/", - "post_title": "337. MURDER MILE WALKS: Stories of London\u2019s Most Infamous & Shocking Murders [Some Explicit Content + Swearing]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.899142Z", - "index": 2016032301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/20/i-was-invited-onto-craig-wealands-weekly-blab-and-we-talked-about-comedy-video/", - "post_title": "I was invited onto Craig Wealand\u2019s weekly Blab, and we talked about comedy", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.892143Z", - "index": 2016032001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 336, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/16/336-drinking-scottish-whisky-at-a-german-business-meeting-while-wearing-a-kilt-and-playing-a-flute-and-other-stories-with-carrick-cameron/", - "post_title": "336. Drinking Scottish Whisky at a German Business Meeting While Wearing a Kilt and Playing a Flute\u2026 and other stories (with Carrick Cameron)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.884146Z", - "index": 2016031601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 335, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/13/335-vocabulary-review-phrases-expressions-from-episode-334/", - "post_title": "335. VOCABULARY REVIEW: Phrases & Expressions from Episode 334.", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.876148Z", - "index": 2016031301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 334, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/09/334-interview-with-craig-wealand-from-inglespodcast/", - "post_title": "334. Interview with Craig Wealand (from InglesPodcast)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.869151Z", - "index": 2016030901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/04/my-interview-with-school-kids-from-ies-school-in-san-fernando-spain/", - "post_title": "My interview with school kids from IES School in San Fernando, Spain", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.860154Z", - "index": 2016030401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 333, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/03/01/333-more-misheard-lyrics-\u266c/", - "post_title": "333. More Misheard Lyrics \u266c", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.853156Z", - "index": 2016030101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 332, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/02/26/332-olly-richards-english-polyglot-top-advice-and-strategies-for-language-learning/", - "post_title": "332. Olly Richards: English Polyglot \u2013 Top Advice and Strategies for Language Learning", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.844159Z", - "index": 2016022601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 331, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/02/22/331-hows-your-english-and-why-speaking-is-so-important/", - "post_title": "331. How\u2019s your English? (and why speaking is so important)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.837161Z", - "index": 2016022201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 330, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/02/17/330-lets-play-grand-theft-auto-5-and-learn-some-english-while-doing-it/", - "post_title": "330. Let\u2019s Play\u2026 Grand Theft Auto 5 (and learn some English while doing it)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.829168Z", - "index": 2016021701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 329, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/02/14/329-a-rambling-chat-with-james-news-stories-jokes/", - "post_title": "329. A Rambling Chat with James (News, Stories, Jokes)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.822171Z", - "index": 2016021401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 328, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/02/03/328-cooking-with-luke-verbs-and-expressions-in-the-kitchen/", - "post_title": "328. Cooking with Luke \u2013 Verbs and Expressions in the Kitchen", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.814169Z", - "index": 2016020301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 327, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/01/20/327-the-lep-photo-competition-please-check-out-the-photos-and-vote/", - "post_title": "327. The LEP Photo Competition \u2013 Please check out the photos and vote", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.807171Z", - "index": 2016012002, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 326, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/01/20/326-catching-up-with-oli-future-predictions/", - "post_title": "326. Catching up with Oli / Future Predictions (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.800174Z", - "index": 2016012001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 325, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/01/18/325-catching-up-with-oli-future-predictions/", - "post_title": "325. Catching Up with Oli / Future Predictions (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.792181Z", - "index": 2016011801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 324, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/01/14/324-david-bowie-part-2/", - "post_title": "324. David Bowie (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.785183Z", - "index": 2016011402, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 323, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/01/14/323-david-bowie-part-1/", - "post_title": "323. David Bowie (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.777186Z", - "index": 2016011401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 322, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/01/07/322-with-the-thompsons/", - "post_title": "322. With The Thompsons", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.770188Z", - "index": 2016010701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 321, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2016/01/04/321-star-wars-episode-vii-the-force-awakens-spoiler-review/", - "post_title": "321. Star Wars Episode VII: The Force Awakens \u2013 SPOILER REVIEW", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.762190Z", - "index": 2016010401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 320, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/12/23/320-a-christmas-carol-by-charles-dickens/", - "post_title": "320. A Christmas Carol by Charles Dickens", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.755193Z", - "index": 2015122301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 319, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/12/16/319-star-wars-vii-the-force-awakens-reaction-no-spoilers/", - "post_title": "319. Star Wars VII: The Force Awakens \u2013 Reaction (No spoilers!)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.746191Z", - "index": 2015121602, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 318, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/12/16/318-the-rematch-part-2/", - "post_title": "318. The Rematch (Part 2) with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.739193Z", - "index": 2015121601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 317, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/12/11/the-rematch/", - "post_title": "317. The Rematch (Part 1) With Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.731196Z", - "index": 2015121101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 316, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/12/07/316-british-comedy-tim-vine-part-2/", - "post_title": "316. British Comedy: Tim Vine (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.724198Z", - "index": 2015120701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 315, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/12/03/315-do-me-a-favour-take-my-business-english-survey/", - "post_title": "315. Do me a favour \u2013 Take my Business English Survey!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.716202Z", - "index": 2015120301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 314, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/12/01/lukes-guided-sleep-meditation/", - "post_title": "314. Luke\u2019s Guided Sleep Meditation", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.709203Z", - "index": 2015120101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 313, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/11/27/313-british-comedy-tim-vine/", - "post_title": "313. British Comedy: Tim Vine", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.701206Z", - "index": 2015112701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 312, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/11/25/312-the-words-of-the-year-part-3/", - "post_title": "312. The Words of the Year (Part 3) with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.694208Z", - "index": 2015112501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 311, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/11/18/311-the-words-of-the-year-2015-part-2/", - "post_title": "311. The Words of the Year (Part 2) with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.687211Z", - "index": 2015111802, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 310, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/11/18/310-the-words-of-the-year-part-1/", - "post_title": "310. The Words of the Year (Part 1) with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.679213Z", - "index": 2015111801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/11/16/attacks-in-paris-13-november-2015-eyewitness-report/", - "post_title": "Attacks in Paris (with Paul Taylor)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.672215Z", - "index": 2015111601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 309, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/11/11/309-the-lying-game-part-2/", - "post_title": "309. The Lying Game (Part 2) With Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.664218Z", - "index": 2015111101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 308, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/11/07/308-the-lying-game-part-1/", - "post_title": "308. The Lying Game (Part 1) With Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.657220Z", - "index": 2015110701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 307, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/11/04/307-the-mystery-of-corporate-jargon-management-speak-part-2/", - "post_title": "307. The Mystery of Corporate Jargon & Management Speak (Part 2) with Paul Taylor", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.650223Z", - "index": 2015110401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 306, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/10/28/306-corporate-jargon-management-speak-part-1/", - "post_title": "306. The Mystery of Corporate Jargon & Management Speak (Part 1) with Paul Taylor", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.642225Z", - "index": 2015102801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 303, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/10/19/303-the-battle-of-britain/", - "post_title": "303. The Battle of Britain", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.469287Z", - "index": 2015101901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 302, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/10/14/302-bad-dentist-star-wars-adam-buxton-headphone-jams-jarvis-cocker/", - "post_title": "302. Bad Dentist / Star Wars / Adam Buxton / Headphone Jams / Jarvis Cocker", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.461290Z", - "index": 2015101401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 301, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/10/11/301-david-cameron-the-pig-bad-gig-story-who-is-ronnie-pickering/", - "post_title": "301. David Cameron & The Pig / Bad Gig Story / Who is Ronnie Pickering?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.454291Z", - "index": 2015101101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 300, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/10/07/300-episode-300-part-2/", - "post_title": "300. EPISODE 300 (PART 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.446289Z", - "index": 2015100702, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 300, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/10/07/300-episode-300-part-1/", - "post_title": "300. EPISODE 300 (PART 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.438846Z", - "index": 2015100701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 299, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/09/30/299-the-bank-robbery-part-2/", - "post_title": "299. The Bank Robbery (Part 2) (with Amber, Paul and Sebastian)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.431844Z", - "index": 2015093001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 298, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/09/24/298-the-bank-robbery-part-1/", - "post_title": "298. The Bank Robbery (Part 1) (with Amber, Paul & Sebastian)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.423846Z", - "index": 2015092401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 297, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/09/18/using-humour-in-the-ielts-speaking-test-with-jessica-from-all-ears-english/", - "post_title": "297. Using Humour in the IELTS Speaking Test (With Jessica from All Ears English)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.416859Z", - "index": 2015091801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 296, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/09/11/296-learning-comedy-is-like-learning-a-language/", - "post_title": "296. Learning Comedy is like Learning a Language (with Paul Taylor)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.408855Z", - "index": 2015091101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 295, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/09/07/295-california-road-trip-final-part/", - "post_title": "295. California Road Trip (Final Part)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.400859Z", - "index": 2015090701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 294, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/09/02/294-california-road-trip-part-7/", - "post_title": "294. California Road Trip (Part 7)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.392861Z", - "index": 2015090201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 293, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/09/01/293-california-road-trip-part-6/", - "post_title": "293. California Road Trip (Part 6)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.384865Z", - "index": 2015090101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 292, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/08/31/292-california-road-trip-part-5/", - "post_title": "292. California Road Trip (Part 5)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.377866Z", - "index": 2015083101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 291, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/08/28/291-california-road-trip-part-4/", - "post_title": "291. California Road Trip (Part 4)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.370868Z", - "index": 2015082801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 290, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/08/27/290-california-road-trip-part-3/", - "post_title": "290. California Road Trip (Part 3)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.362866Z", - "index": 2015082701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 289, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/08/26/289-california-road-trip-part-2/", - "post_title": "289. California Road Trip (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.355868Z", - "index": 2015082602, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 288, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/08/26/288-california-road-trip-part-1/", - "post_title": "288. California Road Trip (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.346871Z", - "index": 2015082601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 287, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/08/04/287-vocab-battle-with-amber-paul-exciting-title/", - "post_title": "287. VOCAB BATTLE!!! WITH AMBER & PAUL (exciting title)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.338874Z", - "index": 2015080402, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 286, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/08/04/286-the-wedding-episode/", - "post_title": "286. The Wedding Episode", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.330881Z", - "index": 2015080401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 285, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/08/03/285/", - "post_title": "285. Ten More Fixed Expressions (with Paul Taylor)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.323884Z", - "index": 2015080301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/07/22/an-experimental-live-video-podcast-on-periscope/", - "post_title": "An Experimental Live Video Podcast on Periscope", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.315883Z", - "index": 2015072201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 284, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/07/08/284-questions-from-tea4er-ru-part-2/", - "post_title": "284. Questions from Tea4er.ru (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.308884Z", - "index": 2015070801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 283, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/07/02/283-ten-fixed-expressions/", - "post_title": "283. Ten Fixed Expressions (with Paul Taylor)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.300887Z", - "index": 2015070201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 282, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/06/29/282-questions-from-tea4er-ru/", - "post_title": "282. Questions from Tea4er.ru", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.292894Z", - "index": 2015062901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 281, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/06/17/281-misheard-lyrics/", - "post_title": "281. Misheard Lyrics", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.285896Z", - "index": 2015061701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 280, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/06/14/280-uk-superstitions/", - "post_title": "280. The UK\u2019s Favourite Superstitions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.277899Z", - "index": 2015061401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 279, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/06/10/279-marcus-keeley-northern-ireland-accent-part-3/", - "post_title": "279. Marcus Keeley / Northern Ireland / Accent (Part 3)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.270903Z", - "index": 2015061001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 278, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/06/09/278-marcus-keeley-northern-ireland-part-2/", - "post_title": "278. Marcus Keeley / Northern Ireland (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.262899Z", - "index": 2015060902, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 277, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/06/09/277-a-chat-with-marcus-keeley-from-northern-ireland/", - "post_title": "277. A Chat with Marcus Keeley from Northern Ireland (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.255901Z", - "index": 2015060901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/06/03/survey-what-kind-of-episodes-of-lep-do-you-prefer/", - "post_title": "Survey: What kind of episodes of LEP do you prefer?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.248904Z", - "index": 2015060301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 276, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/06/02/276-qa-session-5/", - "post_title": "276. Q&A Session #5", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.240912Z", - "index": 2015060201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 275, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/29/275-the-phrasal-verb-chronicles-2/", - "post_title": "275. The Phrasal Verb Chronicles #2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.233914Z", - "index": 2015052901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 274, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/26/274-qa-session-4/", - "post_title": "274. Q&A Session #4", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.225916Z", - "index": 2015052601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 273, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/24/273-the-bad-haircut-situation-part-2-more-role-plays-improvisations/", - "post_title": "273. The Bad Haircut Situation Part 2: More Role Plays & Improvisations (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.217918Z", - "index": 2015052401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 272, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/21/272-the-bad-haircut-situation/", - "post_title": "272. The Bad Haircut Situation (with Amber & Paul)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.209921Z", - "index": 2015052101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 271, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/17/catching-up-with-amber-and-paul/", - "post_title": "271. Catching Up with Amber & Paul", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.202919Z", - "index": 2015051701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 270, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/15/270-uk-general-election-results/", - "post_title": "270. UK General Election RESULTS", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.194927Z", - "index": 2015051501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 269, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/05/269-uk-general-election-2015-part-2/", - "post_title": "269. UK General Election 2015 (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.187928Z", - "index": 2015050501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 268, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/03/268-uk-general-election-2015-part-1/", - "post_title": "268. UK General Election 2015 (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.179931Z", - "index": 2015050301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 267, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/02/267-earthquake-in-nepal-other-news/", - "post_title": "267. Earthquake in Nepal + other news", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.172936Z", - "index": 2015050201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/05/01/lukes-tv-appearance-on-france-24-tv/", - "post_title": "Luke\u2019s TV Appearance on France24", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.164938Z", - "index": 2015050101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 266, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/04/24/266-telling-jokes-in-english-part-3/", - "post_title": "266. Telling Jokes in English (Part 3)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.157938Z", - "index": 2015042401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 265, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/04/23/265-telling-jokes-in-english-part-2/", - "post_title": "265. Telling Jokes in English (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.149937Z", - "index": 2015042301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 264, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/04/20/jokes1/", - "post_title": "264. Telling Jokes in English (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.141944Z", - "index": 2015042001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 263, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/04/08/263-past-present-future/", - "post_title": "263. Past, Present & Future", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.134946Z", - "index": 2015040801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/03/31/lukes-interview-on-inglespodcast/", - "post_title": "Luke\u2019s Interview on InglesPodcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.126948Z", - "index": 2015033101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/03/17/a-message-from-luke/", - "post_title": "A Message from Luke", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.119953Z", - "index": 2015031701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 262, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/03/03/262-what-is-britishness-part-2/", - "post_title": "262. What is Britishness? (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.111953Z", - "index": 2015030302, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 261, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/03/03/261-what-is-britishness-part-1/", - "post_title": "261. What is Britishness? (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.104955Z", - "index": 2015030301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 260, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/02/26/kingsman/", - "post_title": "260. Kingsman: The Secret Service", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.096958Z", - "index": 2015022601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 259, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/02/24/259-eulogy-for-dennis/", - "post_title": "259. Eulogy for Dennis", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.089961Z", - "index": 2015022401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 258, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/02/17/258-award-win-thank-you-poem/", - "post_title": "258. Award Win / Thank You / Poem", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.081959Z", - "index": 2015021701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 257, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/02/10/257-be-positive/", - "post_title": "257. Be Positive", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.073966Z", - "index": 2015021001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 256, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/02/01/reading-books-in-english/", - "post_title": "256. Reading Books in English (and listening to them too)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.066964Z", - "index": 2015020101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 255, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/26/255-taken-3-expressions-with-take/", - "post_title": "255. Taken 3 / Expressions with \u2018Take\u2019", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.058971Z", - "index": 2015012601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 254, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/22/254-ielts-tips-tricks/", - "post_title": "254. IELTS Tips & Tricks", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.051973Z", - "index": 2015012201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 253, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/20/fluency-mc/", - "post_title": "253. Rapping with Fluency MC!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.043975Z", - "index": 2015012001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 252, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/16/marooned-with-my-music-james-thompson/", - "post_title": "252. Marooned With My Music: James Thompson", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.036978Z", - "index": 2015011601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 251, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/13/251-welcome-to-lep-16-things-you-should-know-about-lep/", - "post_title": "251. Welcome to LEP / 16 Things You Should Know about LEP", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.027981Z", - "index": 2015011301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 250, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/11/250-marooned-with-my-music-gill-thompson/", - "post_title": "250. Marooned With My Music: Gill Thompson", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.020983Z", - "index": 2015011101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 249, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/08/249-news-lep-merchandise-messages/", - "post_title": "249. News / LEP Merchandise / Messages", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.012986Z", - "index": 2015010801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 248, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/06/248-marooned-with-my-music-rick-thompson/", - "post_title": "248. Marooned With My Music: Rick Thompson", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:27.005988Z", - "index": 2015010601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 247, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2015/01/03/247-understanding-america/", - "post_title": "247. Understanding The USA", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.997991Z", - "index": 2015010301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 246, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/12/24/246-flight-stories/", - "post_title": "246. Flight Stories", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.990988Z", - "index": 2014122402, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/12/24/video-one-of-lukes-stand-up-comedy-gigs/", - "post_title": "*Video \u2013 One of Luke\u2019s Stand-up Comedy Gigs", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.983991Z", - "index": 2014122401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 245, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/12/23/245-merry-christmas-other-news/", - "post_title": "245. Merry Christmas! (+more) + Video", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.975998Z", - "index": 2014122301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 244, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/12/15/244-urban-myths/", - "post_title": "244. Urban Myths", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.969000Z", - "index": 2014121501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 243, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/12/11/243-a-life-changing-teaching-experience-in-ghana/", - "post_title": "243. A Life-Changing Teaching Experience in Ghana", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.961002Z", - "index": 2014121101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 242, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/12/07/242-11-idioms-only-brits-understand-really/", - "post_title": "242. 11 Idioms Only Brits Understand (really?)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.954005Z", - "index": 2014120701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 241, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/12/02/241-star-wars/", - "post_title": "241. Star Wars", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.946008Z", - "index": 2014120202, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 240, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/12/02/240-politicians-avoiding-questions/", - "post_title": "240. Politicians Avoiding Questions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.939011Z", - "index": 2014120201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 239, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/26/239-prepositions-verb-collocations/", - "post_title": "239. Prepositions: Verb Collocations", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.931013Z", - "index": 2014112601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 238, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/24/238-prepositions-failed-attempt/", - "post_title": "238. Prepositions (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.924015Z", - "index": 2014112401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 237, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/18/237-opp-other-peoples-podcasts-part-2/", - "post_title": "237. OPP: Other People\u2019s Podcasts (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.916014Z", - "index": 2014111802, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 236, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/18/236-opp-other-peoples-podcasts-part-1/", - "post_title": "236. OPP: Other People\u2019s Podcasts (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.908020Z", - "index": 2014111801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/16/my-appearance-on-the-talk2learn-chatcast/", - "post_title": "*My Appearance on the Talk2Learn Chatcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.901022Z", - "index": 2014111601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 235, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/14/british-slang-n-to-z/", - "post_title": "235. British Slang (N to Z)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.893025Z", - "index": 2014111401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 234, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/11/234-making-choons-with-jim/", - "post_title": "234. Making \u201cChoons\u201d with My Brother", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.886027Z", - "index": 2014111101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 233, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/07/233-yep-winner-edgar-hernandez/", - "post_title": "233. YEP! Winner", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.878030Z", - "index": 2014110701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 232, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/06/232-yep-runners-up-part-2/", - "post_title": "232. YEP! Runners Up (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.871027Z", - "index": 2014110602, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 231, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/06/231-yep-runners-up-part-1/", - "post_title": "231. YEP! Runners Up (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.862030Z", - "index": 2014110601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 230, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/11/04/230-can-you-learn-a-language-in-6-months/", - "post_title": "230. Can You Learn a Language in 6 Months?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.855032Z", - "index": 2014110401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 229, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/30/229-zombies-part-2/", - "post_title": "229. Zombies! (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.846036Z", - "index": 2014103002, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 228, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/30/228-zombies/", - "post_title": "228. Zombies! (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.839038Z", - "index": 2014103001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 227, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/27/227-sausages-barcodes-apple-watches/", - "post_title": "227. Sausages, Barcodes & Apple Watches", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.831041Z", - "index": 2014102701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/25/my-video-interview-with-gabby-wallace/", - "post_title": "*My Video Interview with Gabby Wallace from \u201cGo Natural English\u201d", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.824043Z", - "index": 2014102501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 226, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/21/226-on-a-boat/", - "post_title": "226. On a Boat", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.816046Z", - "index": 2014102101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 225, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/16/film-club-taken/", - "post_title": "225. Film Club: \u201cTaken\u201d", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.809048Z", - "index": 2014101601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 224, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/13/pronunciation-verb-tenses-connected-speech/", - "post_title": "224. Pronunciation: Verb Tenses & Connected Speech", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.802051Z", - "index": 2014101301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/10/please-consider-donating-to-lepra-org-uk/", - "post_title": "*Please Consider Donating to Lepra.org.uk", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.793053Z", - "index": 2014101001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 223, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/10/07/223-yep-competition-winners/", - "post_title": "223. YEP! Competition Winners", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.786056Z", - "index": 2014100701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 222, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/30/222-lukes-late-night-podcast/", - "post_title": "222. Luke\u2019s Late Night Podcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.778063Z", - "index": 2014093001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/26/video-playing-around-with-accents-in-english/", - "post_title": "Video: Playing Around with Accents in English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.771065Z", - "index": 2014092601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 221, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/23/221-a-cup-of-tea-with-corneliu-dragomirescu-part-2/", - "post_title": "221. A Cup of Tea with Corneliu Dragomirescu (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.763068Z", - "index": 2014092301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 220, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/17/220-a-cup-of-tea-with-corneliu-dragomirescu/", - "post_title": "220. A Cup of Tea with Corneliu Dragomirescu", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.756071Z", - "index": 2014091701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 219, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/10/scottish-independence/", - "post_title": "219. Scottish Independence", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.748073Z", - "index": 2014091001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 218, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/07/218-yep-competition-entries-8/", - "post_title": "218. YEP! Competition Entries #8", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.741075Z", - "index": 2014090708, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 217, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/07/217-yep-competition-entries-7/", - "post_title": "217. YEP! Competition Entries #7", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.733073Z", - "index": 2014090707, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 216, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/07/216-yep-competition-entries-6/", - "post_title": "216. YEP! Competition Entries #6", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.725075Z", - "index": 2014090706, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 215, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/07/215-yep-competition-entries-5/", - "post_title": "215. YEP! Competition Entries #5", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.718083Z", - "index": 2014090705, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 214, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/07/214-yep-competition-entries-4/", - "post_title": "214. YEP! Competition Entries #4", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.710085Z", - "index": 2014090704, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 213, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/07/213-yep-competition-entries-3/", - "post_title": "213. YEP! Competition Entries #3", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.703087Z", - "index": 2014090703, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 212, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/07/212-yep-competition-entries-2/", - "post_title": "212. YEP! Competition Entries #2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.695090Z", - "index": 2014090702, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 211, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/07/211-yep-competition-entries-1/", - "post_title": "211. YEP! Competition Entries #1", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.688092Z", - "index": 2014090701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 210, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/09/04/210-a-bit-of-a-chat-with-noman-hosni/", - "post_title": "210. A Cup of Tea with Noman Hosni", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.680095Z", - "index": 2014090401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 209, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/08/29/209-travelling-in-indonesia-part-2/", - "post_title": "209. Travelling in Indonesia (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.673097Z", - "index": 2014082902, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 208, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/08/29/208-travelling-in-indonesia-part-1/", - "post_title": "208. Travelling in Indonesia (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.665095Z", - "index": 2014082901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 207, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/08/08/competition-inspiration/", - "post_title": "207. Competition Inspiration", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.658097Z", - "index": 2014080801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 206, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/08/06/205-summer-in-london-part-2/", - "post_title": "206. Summer in London (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.650101Z", - "index": 2014080601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 205, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/08/05/205-summer-in-london-part-1/", - "post_title": "205. Summer in London (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.642102Z", - "index": 2014080502, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 204, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/08/05/204-quick-hello-competition-update-more-news/", - "post_title": "204. Quick Hello: Competition Update & More News", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.635106Z", - "index": 2014080501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 203, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/08/04/203-the-flatmate-from-japan/", - "post_title": "203. The Flatmate from Japan", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.627107Z", - "index": 2014080401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 202, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/08/01/202-british-comedy-monty-python-the-holy-grail/", - "post_title": "202. British Comedy: Monty Python & The Holy Grail", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.620110Z", - "index": 2014080101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/30/my-interview-on-zdeneks-english-podcast/", - "post_title": "My Interview on Zden\u011bk\u2019s English Podcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.612113Z", - "index": 2014073001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 201, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/28/201-nikolay-kulikov-a-russian-comedian-in-london/", - "post_title": "201. Nikolay Kulikov: A Russian Comedian in London", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.605115Z", - "index": 2014072801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 200, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/25/200-new-competition-your-english-podcast/", - "post_title": "200. New Competition: \u201cYour English Podcast\u201d", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.597118Z", - "index": 2014072501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 199, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/17/199-the-ukusa-quiz/", - "post_title": "199. The UK/USA Quiz", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.590119Z", - "index": 2014071702, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 198, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/17/198-a-cup-of-tea-with-molly-martinez/", - "post_title": "198. A Cup of Tea with Molly Martinez", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.582123Z", - "index": 2014071701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 197, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/15/197-world-cup-2014-part-6-final-comments/", - "post_title": "197. World Cup 2014 (Part 6: Final Comments)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.575125Z", - "index": 2014071501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 196, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/07/196-cycling-from-coast-to-coast/", - "post_title": "196. Cycling from Coast to Coast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.567128Z", - "index": 2014070701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 195, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/04/195-british-comedy-monty-pythons-flying-circus/", - "post_title": "195. British Comedy: Monty Python\u2019s Flying Circus", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.558130Z", - "index": 2014070401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 194, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/07/01/world-cup-2014-part-5-more-forum-comments/", - "post_title": "194. World Cup 2014 (Part 5: More Forum Comments)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.551133Z", - "index": 2014070101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 192, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/30/192-culture-shock-life-in-london-part-1/", - "post_title": "192. Culture Shock: Life in London (Pt.1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.468160Z", - "index": 2014063001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 191, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/25/191-culture-shock-the-4-stages/", - "post_title": "191. Culture Shock: The 4 Stages", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.460162Z", - "index": 2014062501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 190, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/23/190-world-cup-2014-part-4-some-history/", - "post_title": "190. World Cup 2014 (Part 4: Dad\u2019s Memories of 1966)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.453164Z", - "index": 2014062301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 189, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/20/189-world-cup-2014-part-3-your-comments/", - "post_title": "189. World Cup 2014 (Part 3: Your Comments)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.445167Z", - "index": 2014062001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 188, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/18/188-world-cup-2014-part-2-england-the-dark-side-of-the-world-cup/", - "post_title": "188. World Cup 2014 (Part 2: England & The Dark Side of the World Cup)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.438169Z", - "index": 2014061802, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 187, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/18/187-world-cup-2014-part-1/", - "post_title": "187. World Cup 2014 (Part 1: The Basic Guide)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.430172Z", - "index": 2014061801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 186, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/16/understanding-culture-shock/", - "post_title": "186. Understanding Culture Shock with Lindsay & Gabby", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.423175Z", - "index": 2014061601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 185, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/13/the-trip-to-new-york/", - "post_title": "185. The Trip to New York", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.414177Z", - "index": 2014061301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/11/welcome-to-the-new-website-teacherluke-co-uk/", - "post_title": "Welcome to the New Website \u2013 teacherluke.co.uk", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.406180Z", - "index": 2014061101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 184, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/10/184-lukes-d-day-diary-part-2/", - "post_title": "184. Luke\u2019s D-Day Diary (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.399183Z", - "index": 2014061002, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 183, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/06/10/183-lukes-d-day-diary/", - "post_title": "183. Luke\u2019s D-Day Diary", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.391190Z", - "index": 2014061001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 182, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/05/30/182-learning-english-with-yacine-belhousse/", - "post_title": "182. Learning English with Yacine Belhousse", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.384187Z", - "index": 2014053001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/05/28/my-interview-on-all-ears-english-podcast/", - "post_title": "My Interview on the All Ears English Podcast \u2013 Talking about humour, comedy and how to tell jokes in English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.376190Z", - "index": 2014052801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 181, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/05/23/181-vocabulary-expressions-from-episode-180/", - "post_title": "181. Vocabulary & Expressions from Episode 180", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.368193Z", - "index": 2014052301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 180, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/05/20/180-dislocated-shoulder/", - "post_title": "180. How my Brother Dislocated his Shoulder (with James)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.359195Z", - "index": 2014052001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 179, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/05/15/179-the-ramblings-of-an-exhausted-teacher/", - "post_title": "179. The Ramblings of an Exhausted Teacher", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.352198Z", - "index": 2014051501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 178, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/04/30/178-im-still-here/", - "post_title": "178. I\u2019m Still Here", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.343206Z", - "index": 2014043001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/04/06/a-letter-to-my-listeners/", - "post_title": "A Letter to My Listeners", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.336207Z", - "index": 2014040601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 177, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/04/01/177-what-londoners-say-vs-what-they-mean/", - "post_title": "177. What Londoners Say vs What They Mean", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.328210Z", - "index": 2014040101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 176, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/03/24/176-grammar-verb-tense-review/", - "post_title": "176. Grammar: Verb Tense Review", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.321212Z", - "index": 2014032401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 175, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/03/18/175-the-phrasal-verb-chronicles-1/", - "post_title": "175. The Phrasal Verb Chronicles #1", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.313211Z", - "index": 2014031801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 174, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/03/12/174-how-to-learn-english-with-lukes-english-podcast/", - "post_title": "174. How to Learn English with Luke\u2019s English Podcast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.306213Z", - "index": 2014031201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 173, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/03/06/173-the-curse-of-the-lambton-worm/", - "post_title": "173. The Curse of The Lambton Worm", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.298220Z", - "index": 2014030601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 172, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/02/26/172-british-comedy-peter-cook-dudley-moore/", - "post_title": "172. British Comedy: Peter Cook & Dudley Moore", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.291222Z", - "index": 2014022601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 171, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/02/21/171-a-cup-of-tea-with-daniel-burt-part-2/", - "post_title": "171. A Cup of Tea with Daniel Burt (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.283221Z", - "index": 2014022101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 170, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/02/19/170-basking-in-my-moment-of-glory/", - "post_title": "170. Basking in My Moment of Glory", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.276227Z", - "index": 2014021901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 169, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/02/15/danielburt/", - "post_title": "169. A Cup of Tea with Daniel Burt (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.268225Z", - "index": 2014021501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 168, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/02/11/168-please-vote-and-stuff-like-that/", - "post_title": "168. Please Vote! (and stuff like that)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.261232Z", - "index": 2014021101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 167, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/02/05/167-memory-mnemonics-learning-english/", - "post_title": "167. Memory, Mnemonics & Learning English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.253235Z", - "index": 2014020501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 166, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/01/31/166-the-prawn-story/", - "post_title": "166. The Prawn Story", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.245237Z", - "index": 2014013101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 165, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/01/23/english-premier-league-football/", - "post_title": "165. English Premier League Football", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.238240Z", - "index": 2014012301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 164, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/01/21/164-transcript-collaboration/", - "post_title": "164. Transcript Collaboration", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.231242Z", - "index": 2014012101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 163, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/01/15/163-skype-chat-with-my-brother/", - "post_title": "163. Skype Chat with My Brother", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.223244Z", - "index": 2014011501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 162, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/01/10/162-having-babies-vocabulary-a-male-perspective/", - "post_title": "162. Having Babies: Vocabulary / A Male Perspective", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.216244Z", - "index": 2014011001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 161, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2014/01/09/161-shes-having-a-baby/", - "post_title": "161. She\u2019s Having a Baby", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.208245Z", - "index": 2014010901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 160, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/12/24/160-the-a-to-z-of-christmas/", - "post_title": "160. The A to Z of Christmas", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.201248Z", - "index": 2013122401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 158, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/12/23/158-159-a-cup-of-christmas-tea-with-paul-taylor/", - "post_title": "158 & 159. A Cup of Christmas Tea with\u2026 Paul Taylor", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.193255Z", - "index": 2013122302, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 157, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/12/23/157-a-cup-of-coffee-with-sarah-donnelly-part-2/", - "post_title": "157. A Cup of Coffee with\u2026 Sarah Donnelly (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.186252Z", - "index": 2013122301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 156, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/12/12/156-british-comedy-ali-g/", - "post_title": "156. British Comedy: Ali G", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.178254Z", - "index": 2013121201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 155, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/12/05/155-a-cup-of-coffee-with-sarah-donnelly/", - "post_title": "155. A Cup of Coffee with\u2026 Sarah Donnelly", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.171257Z", - "index": 2013120501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 154, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/11/27/154-british-slang-h-to-m/", - "post_title": "154. British Slang (H to M)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.163260Z", - "index": 2013112701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 153, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/11/20/153-the-talking-dog-story/", - "post_title": "153. The Talking Dog Story", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.156262Z", - "index": 2013112001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/11/14/doctor-who-episode-language-analysis/", - "post_title": "Doctor Who Episode \u2013 Language Analysis", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.148264Z", - "index": 2013111401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 152, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/11/06/152-im-leaving-podomatic-and-moving-to-audioboo-fm/", - "post_title": "152. I\u2019m leaving Podomatic\u2026 and moving to Audioboo.fm", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.141267Z", - "index": 2013110601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 151, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/10/25/151-google-questions/", - "post_title": "151. Google Questions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.133271Z", - "index": 2013102502, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 150, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/10/25/150-british-slang-d-to-g/", - "post_title": "150. British Slang (D to G)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.125272Z", - "index": 2013102501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 149, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/10/15/149-backing-up-into-the-cloud/", - "post_title": "149. Backing Up Into The Cloud", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.117276Z", - "index": 2013101501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 148, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/09/12/148-british-slang-a-to-c/", - "post_title": "148. British Slang (A to C)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.108278Z", - "index": 2013091201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 147, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/09/08/147-idioms-and-expressions-from-episodes-145-146/", - "post_title": "147. Idioms and Expressions from Episodes 145 & 146", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.101281Z", - "index": 2013090801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 146, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/09/05/146-nightmare-teaching-experiences-part-2/", - "post_title": "146. Nightmare Teaching Experiences (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.093287Z", - "index": 2013090501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 145, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/09/02/145-nightmare-teaching-experiences-part-1/", - "post_title": "145. Nightmare Teaching Experiences (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.086290Z", - "index": 2013090201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 144, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/08/29/144-the-chaos-of-english-pronunciation/", - "post_title": "144. The Chaos of English Pronunciation", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.078288Z", - "index": 2013082901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 143, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/08/19/143-a-cup-of-tea-with-robert-hoehn/", - "post_title": "143. A Cup of Tea with\u2026 Robert Hoehn", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.071295Z", - "index": 2013081901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 142, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/08/04/142-the-annual-general-meeting-part-2/", - "post_title": "142. The Annual General Meeting (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.063299Z", - "index": 2013080402, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 141, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/08/04/141-the-annual-general-meeting-part-1/", - "post_title": "141. The Annual General Meeting (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.056301Z", - "index": 2013080401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 140, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/07/31/140-ghost-stories/", - "post_title": "140. Ghost Stories", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.048304Z", - "index": 2013073101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 139, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/07/09/139-hard-driving/", - "post_title": "139. Hard Driving", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.041307Z", - "index": 2013070901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 138, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/07/07/138-discussing-movies-part-2/", - "post_title": "138. Discussing Movies (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.033307Z", - "index": 2013070701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 137, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/06/29/137-discussing-movies-part-1/", - "post_title": "137. Discussing Movies (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.025310Z", - "index": 2013062901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 136, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/06/23/136-clycling-from-london-to-paris/", - "post_title": "136. Cycling from London to Paris", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.018312Z", - "index": 2013062301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 135, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/06/17/135-raining-animals/", - "post_title": "135. Raining Animals", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.010315Z", - "index": 2013061701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 134, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/06/11/134-the-story-of-salvo/", - "post_title": "134. The Story of Salvo", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:26.003317Z", - "index": 2013061101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/06/04/old-comments/", - "post_title": "Old Comments Box Archive", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.995320Z", - "index": 2013060401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 133, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/06/01/133-hip-hop-lyric-analysis/", - "post_title": "133. Hip-Hop Lyric Analysis", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.988322Z", - "index": 2013060101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 132, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/05/17/132-pronouncing-ed-endings-with-added-romance-and-horror/", - "post_title": "132. Pronouncing ~ed Endings (with Added Romance and Horror)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.979325Z", - "index": 2013051701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 131, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/05/01/131-rickipedia/", - "post_title": "131. Rickipedia", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.972327Z", - "index": 2013050101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 130, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/04/17/130-a-cup-of-tea-with-sebastian-marx/", - "post_title": "130. A Cup of Tea with\u2026 Sebastian Marx", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.963330Z", - "index": 2013041701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 129, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/04/10/129-a-cup-of-tea-with-pierre-gaspard/", - "post_title": "129. A Cup of Tea with\u2026 Pierre Gaspard", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.956332Z", - "index": 2013041001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 128, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/04/07/795/", - "post_title": "128. Luke\u2019s Stand-Up Comedy Show", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.949331Z", - "index": 2013040701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/03/26/mini-podcast-feeling-nervous/", - "post_title": "Mini Podcast \u2013 Feeling Nervous", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.941332Z", - "index": 2013032601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 127, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/03/04/127-computer-games/", - "post_title": "127. Computer Games", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.934335Z", - "index": 2013030401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 126, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/02/20/126-your-emails-comments-and-questions/", - "post_title": "126. Your Emails, Comments and Questions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.925344Z", - "index": 2013022001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 125, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/02/14/125-the-pink-gorilla-story/", - "post_title": "125. The Pink Gorilla Story", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.918340Z", - "index": 2013021401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/01/23/another-award-winning-year/", - "post_title": "Another Award-Winning Year!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.910349Z", - "index": 2013012302, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 124, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/01/23/124-james-bond/", - "post_title": "124. James Bond", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.903351Z", - "index": 2013012301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/01/21/downloading-problems/", - "post_title": "Thanks for Voting / Downloading Problems", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.895354Z", - "index": 2013012101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 123, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/01/20/123-whats-been-going-on/", - "post_title": "123. What\u2019s Been Going On?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.888356Z", - "index": 2013012001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2013/01/10/competition-time-again/", - "post_title": "Competition Time Again!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.880360Z", - "index": 2013011001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 122, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/12/20/122-the-end-of-the-world/", - "post_title": "122. The End of the World?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.873362Z", - "index": 2012122001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 121, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/12/10/121-americanisms-part-2/", - "post_title": "121: Americanisms (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.866358Z", - "index": 2012121001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 120, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/11/10/120-americanisms/", - "post_title": "120. Americanisms", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.857366Z", - "index": 2012111001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 119, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/10/17/119-first-impressions-of-life-in-paris/", - "post_title": "119. First Impressions of Life in Paris", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.850363Z", - "index": 2012101702, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 118, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/10/17/118-sick-in-japan/", - "post_title": "118. Sick in Japan", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.841366Z", - "index": 2012101701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 117, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/10/11/117-psychics-cold-reading-barnum-statements/", - "post_title": "117. Psychics / Cold Reading / Barnum Statements", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.833368Z", - "index": 2012101101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 116, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/10/10/116-could-it-be-you/", - "post_title": "116. Could it be you\u2026?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.826370Z", - "index": 2012101001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 115, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/10/04/115-a-chat-about-music/", - "post_title": "115. A Chat About Music", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.818377Z", - "index": 2012100401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 114, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/10/02/693/", - "post_title": "114. Twelve Natural Expressions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.810380Z", - "index": 2012100201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 112, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/09/20/vocabulary-review-episodes-1-11/", - "post_title": "112. Vocabulary Review \u2013 Episodes 1-11", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.745401Z", - "index": 2012092001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 111, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/09/17/thanks-for-your-comments/", - "post_title": "111. Thanks for your comments", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.738404Z", - "index": 2012091701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 110, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/09/12/a-letter-from-luke/", - "post_title": "110. A Letter from Luke", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.730406Z", - "index": 2012091201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 109, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/08/29/friday-night-banter-aka-the-slightly-drunk-episode/", - "post_title": "109. Friday Night Banter (aka The Slightly Drunk Episode)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.723409Z", - "index": 2012082901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/08/06/london-olympics-2012/", - "post_title": "London Olympics 2012 (Video)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.715408Z", - "index": 2012080602, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 108, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/08/06/in-bed-with-luke/", - "post_title": "108. In Bed with Luke", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.708413Z", - "index": 2012080601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 107, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/07/02/messing-around-with-accents-and-voices/", - "post_title": "107. Messing Around with Accents and Voices", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.700412Z", - "index": 2012070201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 106, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/06/29/brighton-fringe-festival-3/", - "post_title": "106. Brighton Fringe Festival #3", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.692419Z", - "index": 2012062901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 105, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/06/17/brighton-fringe-festival-2/", - "post_title": "105. Brighton Fringe Festival #2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.685421Z", - "index": 2012061701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 104, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/06/07/brighton-fringe-festival-1/", - "post_title": "104. Brighton Fringe Festival #1", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.677423Z", - "index": 2012060701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 103, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/06/04/the-queen-and-the-royal-family/", - "post_title": "103. The Queen and The Royal Family", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.670426Z", - "index": 2012060401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 102, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/05/30/competition-winners/", - "post_title": "102. Competition Winners", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.662428Z", - "index": 2012053001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 101, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/05/17/a-note-from-luke/", - "post_title": "101. A Note from Luke", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.655431Z", - "index": 2012051701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 100, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/05/12/going-to-the-pub/", - "post_title": "100. Going To The Pub", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.647429Z", - "index": 2012051201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 99, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/29/the-rotary-sushi-bar-of-english/", - "post_title": "99. The Rotary Sushi Bar of English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.640431Z", - "index": 2012042901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 98, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/28/luke-vs-oliver-part-2/", - "post_title": "98. Luke vs Oliver (Part 2)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.632434Z", - "index": 2012042801, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 97, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/20/luke-vs-oliver-part-1/", - "post_title": "97. Luke vs Oliver (Part 1)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.625436Z", - "index": 2012042001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 94, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/12/competition-entries/", - "post_title": "94 \u2013 96. Competition Entries", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.617439Z", - "index": 2012041201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 93, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/11/weird-or-just-different/", - "post_title": "93. Weird\u2026 or just different?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.610441Z", - "index": 2012041101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 92, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/10/uk-royal-family-opinions-video-part-2-video-uploading-now-on-youtube/%20", - "post_title": "92. UK Royal Family Opinions \u2013 Video (Part 2) [TRANSCRIPT]", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.602443Z", - "index": 2012041004, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/10/competition-update/", - "post_title": "Competition Update", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.594446Z", - "index": 2012041003, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 91, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/10/the-a-to-z-of-random-thoughts/", - "post_title": "91. The A to Z of Random Thoughts", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.587448Z", - "index": 2012041002, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 90, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/04/10/competition-phrasal-verbs-a-b-c/", - "post_title": "90. Competition + Phrasal Verbs A, B + C", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.580451Z", - "index": 2012041001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 89, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/03/13/a-day-in-the-life/", - "post_title": "89. A Day In The Life", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.573453Z", - "index": 2012031301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 88, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/03/12/how-to-play-the-drums/", - "post_title": "88. How To Play The Drums", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.564456Z", - "index": 2012031201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 87, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/03/07/6-idioms-and-6-phrasal-verbs/", - "post_title": "87. 6 Idioms and 6 Phrasal Verbs", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.557459Z", - "index": 2012030702, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 86, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/03/07/criminal-law/", - "post_title": "86. Criminal Law", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.549462Z", - "index": 2012030701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 85, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/03/06/a-stand-up-comedy-gig/", - "post_title": "85. A Stand-up Comedy Gig", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.540470Z", - "index": 2012030602, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 84, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/03/06/lukes-english-braincast/", - "post_title": "84. Luke\u2019s English Braincast", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.532468Z", - "index": 2012030601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 83, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/01/30/how-to-swear-in-british-english-very-rude-content/", - "post_title": "83. How to Swear in British English \u2013 VERY RUDE CONTENT", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.523474Z", - "index": 2012013003, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 82, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/01/30/voting-elections-politics-government/", - "post_title": "82. Voting / Elections / Politics / Government", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.515473Z", - "index": 2012013002, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 81, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/01/30/what-makes-a-great-teacher/", - "post_title": "81. What Makes a Great Teacher?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.508479Z", - "index": 2012013001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 80, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/01/23/essential-social-english/", - "post_title": "80. Essential Social English", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.500477Z", - "index": 2012012304, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 79, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/01/23/family-arguments-and-debates/", - "post_title": "79. Family Arguments and Debates", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.493484Z", - "index": 2012012303, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 78, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/01/23/christmas-its-all-about-family/", - "post_title": "78. Christmas \u2013 It\u2019s all about Family", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.486486Z", - "index": 2012012302, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 77, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/01/23/bear-vs-shark/", - "post_title": "77. Bear vs Shark", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.478489Z", - "index": 2012012301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 0, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2012/01/15/vote-for-lukes-english-podcast/", - "post_title": "VOTE FOR LUKE\u2019S ENGLISH PODCAST", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.470491Z", - "index": 2012011501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 76, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/11/07/mind-the-gap-how-to-use-the-london-underground/", - "post_title": "76. Mind The Gap \u2013 How to use the London Underground", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.462494Z", - "index": 2011110701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 75, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/11/03/258/", - "post_title": "75. Not a Distraction!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.455496Z", - "index": 2011110302, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 74, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/11/03/uk-royal-family-opinions-english-interviews-in-london/", - "post_title": "74. UK Royal Family Opinions \u2013 English Interviews in London", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.447499Z", - "index": 2011110301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 73, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/14/steve-jobs/", - "post_title": "73. Steve Jobs", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.440501Z", - "index": 2011101408, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 72, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/14/the-cheese-episode/", - "post_title": "72. The Cheese Episode", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.433504Z", - "index": 2011101407, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 71, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/14/the-ice-cream-episode/", - "post_title": "71. The Ice Cream Episode", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.425507Z", - "index": 2011101406, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 70, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/14/language-and-music/", - "post_title": "70. Language and Music", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.418506Z", - "index": 2011101405, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 69, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/14/common-errors-typical-mistakes/", - "post_title": "69. Common Errors / Typical Mistakes", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.410511Z", - "index": 2011101404, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 68, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/14/childhood-growing-up-school-days-phrasal-verbs-and-expressions/", - "post_title": "68. Childhood / Growing Up / School Days \u2013 Phrasal Verbs and Expressions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.402514Z", - "index": 2011101403, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 67, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/14/cockney-london-accent/", - "post_title": "67. Cockney / London Accent", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.394518Z", - "index": 2011101402, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 66, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/14/top-advice-for-learning-english-idioms-with-say-culture-shock/", - "post_title": "66. Top Advice for Learning English / Idioms with \u2018say\u2019 / Culture Shock", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.387521Z", - "index": 2011101401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 65, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/london-video-interviews-pt-5/", - "post_title": "65. London Video Interviews Pt 5", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.379523Z", - "index": 2011101211, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 64, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/london-video-interviews-pt-5/", - "post_title": "64. London Video Interviews Part 5 (Video)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.372524Z", - "index": 2011101210, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 63, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/german-and-british-cultural-identity-paco-erhard-interview-part-2/", - "post_title": "63. German and British Cultural Identity \u2013 Paco Erhard interview part 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.364522Z", - "index": 2011101209, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 62, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/learning-english-advice-from-a-german-comedian-living-in-london/", - "post_title": "62. Learning English \u2013 Advice from a German comedian living in London", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.356524Z", - "index": 2011101208, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 61, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/127-hours-hand-idioms/", - "post_title": "61. 127 Hours / \u2018Hand\u2019 Idioms", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.349528Z", - "index": 2011101207, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 60, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/the-kings-speech-mouth-idioms/", - "post_title": "60. The King\u2019s Speech / \u2018Mouth\u2019 Idioms", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.340529Z", - "index": 2011101206, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 59, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/billy-connolly-interview-more-scottish-accent/", - "post_title": "59. Billy Connolly Interview / More Scottish Accent", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.332533Z", - "index": 2011101205, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 58, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/scotland-scottish-accent/", - "post_title": "58. Scotland / Scottish Accent", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.325539Z", - "index": 2011101204, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 57, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/birmingham-accent-12-phrasal-verbs-with-the-letter-a/", - "post_title": "57. Birmingham Accent / 12 Phrasal Verbs with the letter \u2018A\u2019", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.317543Z", - "index": 2011101203, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 56, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/british-accents-and-dialects/", - "post_title": "56. British Accents and Dialects", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.310544Z", - "index": 2011101202, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 55, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/12/mini-podcasts-collection-1/", - "post_title": "55. Mini Podcasts Collection 1", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.302543Z", - "index": 2011101201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 54, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/halloween-guy-fawkes-night/", - "post_title": "54. Halloween / Guy Fawkes Night", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.295549Z", - "index": 2011101112, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 53, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/discussing-grammar-with-my-brother/", - "post_title": "53. Discussing Grammar with My Brother", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.287554Z", - "index": 2011101111, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 52, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/154/", - "post_title": "52. London Video Interviews Part 4", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.280550Z", - "index": 2011101110, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 51, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/luke-answers-your-emails-and-questions/", - "post_title": "51. Luke Answers Your Emails and Questions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.273552Z", - "index": 2011101109, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 50, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/good-things-come-to-those-who-wait/", - "post_title": "50. Good Things Come To Those Who Wait", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.265555Z", - "index": 2011101108, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 49, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/stand-up-comedy/", - "post_title": "49. Stand Up Comedy", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.258561Z", - "index": 2011101107, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 48, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/useful-expressions-for-travelling/", - "post_title": "48. Useful Expressions for Travelling", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.250559Z", - "index": 2011101106, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 47, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/travelling-in-vietnam/", - "post_title": "47. Travelling in Vietnam", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.243561Z", - "index": 2011101105, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 46, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/46-im-on-holiday-ill-be-back-in-a-couple-of-weeks/", - "post_title": "46. I\u2019m on Holiday! I\u2019ll be back in a couple of weeks", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.236564Z", - "index": 2011101104, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 45, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/luke-andys-crime-stories/", - "post_title": "45. Luke & Andy\u2019s Crime Stories", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.228571Z", - "index": 2011101103, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 44, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/telling-anecdotes/", - "post_title": "44. Telling Anecdotes", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.221569Z", - "index": 2011101102, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 43, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/10/11/notting-hill-carnival-video-frustration-out-takes/", - "post_title": "43. Notting Hill Carnival Video Frustration (Out-takes)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.213576Z", - "index": 2011101101, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 42, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/03/29/london-video-interviews-pt-3/", - "post_title": "42. London Video Interviews Pt 3 (Audio)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.205578Z", - "index": 2011032902, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 41, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2011/03/29/london-video-interviews-pt-3/", - "post_title": "41. London Video Interviews Part 3 (Video)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.197581Z", - "index": 2011032901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 40, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2010/03/26/health-feeling-ill-phrasal-verbs-expressions/", - "post_title": "40. Health / Feeling ill \u2013 Phrasal Verbs & Expressions", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.190583Z", - "index": 2010032604, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 39, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2010/03/26/subtitles-in-videos/", - "post_title": "39. Subtitles in Videos (Video)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.183581Z", - "index": 2010032603, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 38, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2010/03/26/116/", - "post_title": "38. London Video Interviews Part 2 (Audio)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.175583Z", - "index": 2010032602, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 37, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2010/03/26/116/", - "post_title": "37. London Video Interviews Part 2 (Video)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:25.168586Z", - "index": 2010032601, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 33, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/15/money-money-money-12-phrasal-verbs-more/", - "post_title": "33. Money Money Money \u2013 12 Phrasal Verbs & more\u2026", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.943456Z", - "index": 2009111501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 32, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/14/doctor-who/", - "post_title": "32. Doctor Who", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.936456Z", - "index": 2009111403, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 31, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/14/hello-argument-sketch/", - "post_title": "31. Hello! / Argument Sketch", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.929459Z", - "index": 2009111402, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 30, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/14/the-mystery-continues/", - "post_title": "30. The Mystery Continues\u2026", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.922462Z", - "index": 2009111401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 29, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/12/mystery-story-narrative-tenses/", - "post_title": "29. Mystery Story / Narrative Tenses", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.914464Z", - "index": 2009111202, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 28, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/12/interview-with-a-native-speaker-the-weather/", - "post_title": "28. Interview with a Native Speaker \u2013 The Weather", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.907466Z", - "index": 2009111201, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 27, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/10/british-weather-lots-of-exciting-vocabulary/", - "post_title": "27. British Weather (Lots of exciting vocabulary!!!)", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.899465Z", - "index": 2009111002, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 26, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/10/are-you-a-good-learner-of-english/", - "post_title": "26. Are you a good learner of English?", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.892471Z", - "index": 2009111001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 25, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/07/notting-hill-carnival-40-phrasal-verbs/", - "post_title": "25. Notting Hill Carnival \u2013 40 Phrasal Verbs", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.884469Z", - "index": 2009110702, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 24, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/11/07/music-idioms/", - "post_title": "24. Music Idioms", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.876477Z", - "index": 2009110701, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 23, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/20/summer-music-festivals/", - "post_title": "23. Summer Music Festivals", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.869479Z", - "index": 2009102003, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 22, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/20/full-interview-with-vicky-from-china/", - "post_title": "22. Full Interview with Vicky from China", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.860483Z", - "index": 2009102002, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 21, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/20/learning-english-with-podcasts-advice-from-a-chinese-student-at-oxford-university/", - "post_title": "21. Learning English with Podcasts \u2013 Advice from a Chinese student at Oxford University", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.853485Z", - "index": 2009102001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 20, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/beware-of-bad-pronunciation/", - "post_title": "20. Beware of Bad Pronunciation", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.844482Z", - "index": 2009101913, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 19, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/passive-verb-forms/", - "post_title": "19. Passive Verb Forms", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.837490Z", - "index": 2009101912, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 18, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/46/", - "post_title": "18. 10 More Phrasal Verbs", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.829492Z", - "index": 2009101911, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 17, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/hello-to-my-listeners-around-the-world/", - "post_title": "17. Hello To My Listeners Around The World", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.822494Z", - "index": 2009101910, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 14, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/episode-10-british-and-american-pronunciation/", - "post_title": "14. British & American Pronunciation", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.658549Z", - "index": 2009101907, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 13, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/video-podcast-i-like-it/", - "post_title": "13. Video Podcast \u2013 I LIKE IT!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.651550Z", - "index": 2009101906, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 12, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/extra-podcast-quick-hello-3/", - "post_title": "12. Extra Podcast \u2013 Quick Hello 3", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.643553Z", - "index": 2009101905, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 11, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/episode-9-men-vs-women/", - "post_title": "11. Men vs Women", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.636555Z", - "index": 2009101904, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 10, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/extra-podcast-quick-hello-2/", - "post_title": "10. Extra Podcast \u2013 Quick Hello 2", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.628553Z", - "index": 2009101903, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 9, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/episode-8-travelling-in-india/", - "post_title": "9. Travelling in India", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.621555Z", - "index": 2009101902, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 8, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/10/19/episode-7-dating-and-relationships/", - "post_title": "8. Dating and Relationships", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.613562Z", - "index": 2009101901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 7, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/04/30/episode-6-susan-boyle/", - "post_title": "7. Susan Boyle", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.606565Z", - "index": 2009043001, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 6, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/04/24/episode-5-vampires/", - "post_title": "6. Vampires!", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.598563Z", - "index": 2009042401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 5, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/04/23/episode-4-joaquin-phoenix/", - "post_title": "5. Joaquin Phoenix", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.590565Z", - "index": 2009042301, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 4, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/04/19/extra-podcast-quick-hello/", - "post_title": "4. Extra Podcast \u2013 Quick Hello", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.583573Z", - "index": 2009041901, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 3, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/04/15/episode-3-musicthe-beatles/", - "post_title": "3. Music/The Beatles", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.575575Z", - "index": 2009041501, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - }, - { - "episode": 2, - "date": "2000-01-01T00:00:00+00:00", - "url": "https://teacherluke.co.uk/2009/04/14/episode-2-easter/", - "post_title": "2. Easter / Interview with my Dad / Language Focus: Adverbials", - "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.567577Z", - "index": 2009041401, - "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht" - } -] + { + "episode": 733, + "date": "2021-08-03T18:12:02+0200", + "url": "https://teacherluke.co.uk/2021/08/03/733-a-summer-ramble/", + "post_title": "733. A Summer Ramble", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:31.548930Z", + "index": 2021080301, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 714, + "date": "2021-04-11T23:32:42+0200", + "url": "https://teacherluke.co.uk/2021/04/11/714-robin-from-hamburg-%F0%9F%87%A9%F0%9F%87%AA-wisbolep-runner-up/", + "post_title": "714. Robin from Hamburg (WISBOLEP Runner-Up)", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "https://traffic.libsyn.com/secure/teacherluke/714._Robin_from_Hamburg__WISBOLEP_Runner-Up.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:31.446959Z", + "index": 2021041101, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 711, + "date": "2021-03-26T16:06:43+0200", + "url": "https://teacherluke.co.uk/2021/03/26/711-william-from-france-%F0%9F%87%AB%F0%9F%87%B7-wisbolep-runner-up/", + "post_title": "711. William from France (WISBOLEP Runner-UP)", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "https://traffic.libsyn.com/secure/teacherluke/711._William_from_France__WISBOLEP_Runner-UP.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:31.376987Z", + "index": 2021032601, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 703, + "date": "2021-02-03T19:33:04+0200", + "url": "https://teacherluke.co.uk/2021/02/03/703-walaa-from-syria-wisbolep-competition-winner-%F0%9F%8F%86/", + "post_title": "703. Walaa from Syria \u2013 WISBOLEP Competition Winner", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "https://traffic.libsyn.com/secure/teacherluke/703._Walaa_from_Syria_-_WISBOLEP_Competition_Winner_.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:31.309010Z", + "index": 2021020301, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 0, + "date": "2017-08-26T07:30:24+0200", + "url": "https://teacherluke.co.uk/2017/08/26/website-only-a-history-of-british-pop-a-musical-tour-through-james-vinyl-collection/", + "post_title": "[Website only] A History of British Pop \u2013 A Musical Tour through James\u2019 Vinyl Collection", + "post_type": "TEXT", + "files": { + "audios": [] + }, + "parsed_at": "2022-01-26T05:47:30.681214Z", + "index": 2017082601, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 0, + "date": "2017-05-26T12:46:40+0200", + "url": "https://teacherluke.co.uk/2017/05/26/i-was-invited-onto-the-english-across-the-pond-podcast/", + "post_title": "I was invited onto the \u201cEnglish Across The Pond\u201d Podcast", + "post_type": "TEXT", + "files": { + "audios": [] + }, + "parsed_at": "2022-01-26T05:47:30.575249Z", + "index": 2017052601, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 0, + "date": "2017-03-11T19:45:49+0200", + "url": "https://teacherluke.co.uk/2017/03/11/lep-on-zep-my-recent-interview-on-zdeneks-english-podcast/", + "post_title": "LEP on ZEP \u2013 My recent interview on Zdenek\u2019s English Podcast", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "https://audioboom.com/posts/5602875-episode-166-luke-back-on-zep-part-1.mp3" + ], + [ + "https://audioboom.com/posts/5621870-episode-167-luke-back-on-zep-part-2.mp3" + ], + [ + "https://audioboom.com/posts/5627735-episode-168-luke-back-on-zep-part-3.mp3" + ], + [ + "https://audioboom.com/posts/5678762-episode-169-luke-back-on-zep-part-4.mp3" + ], + [ + "https://audioboom.com/posts/5695159-episode-170-luke-back-on-zep-part-5-analysis.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:30.475277Z", + "index": 2017031101, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 370, + "date": "2016-08-07T15:30:38+0200", + "url": "https://teacherluke.co.uk/2016/08/07/370-in-conversation-with-rob-ager-from-liverpool-part-1-life-in-liverpool-interest-in-film-analysis/", + "post_title": "370. In Conversation with Rob Ager from Liverpool (PART 1_ Life in Liverpool _ Interest in Film Analysis)", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/370-in-conversation-with-rob-ager-from-liverpool-part-1-life-in-liverpool-interest-in-film-analysis.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:30.265351Z", + "index": 2016080701, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 305, + "date": "2015-10-07T09:25:39+0200", + "url": "https://teacherluke.co.uk/2015/10/22/305-back-to-the-future-part-2/", + "post_title": "305. Back To The Future (Part 2)", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/300-2-episode-300-part-2.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:30.004431Z", + "index": 2015102201, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 304, + "date": "2015-10-07T09:21:24+0200", + "url": "https://teacherluke.co.uk/2015/10/21/304-back-to-the-future-part-1/", + "post_title": "304. Back To The Future (Part 1)", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/300-1-episode-300-part-1.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:29.945450Z", + "index": 2015102101, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 193, + "date": "2014-06-30T15:37:44+0200", + "url": "https://teacherluke.co.uk/2014/06/30/193-culture-shock-life-in-london-pt-2/", + "post_title": "193. Culture Shock_ Life in London (Pt.2)", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/193-culture-shock-life-in-london-part-2.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:29.597565Z", + "index": 2014063002, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 113, + "date": "2012-09-27T11:49:36+0200", + "url": "http://teacherluke.wordpress.com/2012/09/27/113-setting-the-world-to-rights/", + "post_title": "113. Setting The World To Rights", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/113-setting-the-world-to-rights.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:29.330652Z", + "index": 2012092701, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 35, + "date": "2010-03-25T23:59:36+0200", + "url": "https://teacherluke.co.uk/2010/03/25/london-video-interviews-pt-1/", + "post_title": "35. London Video Interviews \u2013 Part 1 (Video)", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:29.065742Z", + "index": 2010032501, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 16, + "date": "2009-10-19T21:21:43+0200", + "url": "https://teacherluke.co.uk/2009/10/19/episode-11-michael-jackson/", + "post_title": "16. Michael Jackson", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/16-michael-jackson.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:28.951775Z", + "index": 2009101909, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 15, + "date": "2009-10-19T21:14:49+0200", + "url": "https://teacherluke.co.uk/2009/10/19/extra-podcast-12-phrasal-verbs/", + "post_title": "15. Extra Podcast \u2013 12 Phrasal Verbs", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/15-extra-podcast-12-phrasal-verbs.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:28.909793Z", + "index": 2009101908, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 1, + "date": "2009-04-12T15:23:33+0200", + "url": "https://teacherluke.co.uk/2009/04/12/episode-1-introduction/", + "post_title": "1. Introduction", + "post_type": "AUDIO", + "files": { + "audios": [ + [ + "http://traffic.libsyn.com/teacherluke/1-introduction.mp3" + ] + ] + }, + "parsed_at": "2022-01-26T05:47:28.831395Z", + "index": 2009041201, + "admin_note": "", + "updated_at": "" + }, + { + "episode": 732, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/07/29/732-christian-from-canguro-english-returns/", + "post_title": "732. Christian from Canguro English returns", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.545931Z", + "index": 2021072901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 731, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/07/25/731-beatles-song-lyrics-idioms-expressions-with-antony-rotunno/", + "post_title": "731. Beatles Song Lyrics _ Idioms & Expressions (with Antony Rotunno)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.543931Z", + "index": 2021072501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 730, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/07/19/730-marie-connolly-returns-2-songs/", + "post_title": "730. Marie Connolly Returns (+ 2 songs)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.541933Z", + "index": 2021071901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 729, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/07/13/729-toefl-and-the-duolingo-english-test-with-josh-macpherson-from-tstprep-com/", + "post_title": "729. TOEFL and the Duolingo English Test (with Josh MacPherson from TSTPrep.com)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.539934Z", + "index": 2021071301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 728, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/07/05/728-english-with-rob-games-music-jingles/", + "post_title": "728. English with Rob _ Games, Music & Jingles", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.536930Z", + "index": 2021070501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 727, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/06/30/727-describing-john-lennon-adjectives-of-personality-j-z-with-antony-rotunno/", + "post_title": "727. Describing John Lennon _ Adjectives of Personality J-Z (with Antony Rotunno)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.533935Z", + "index": 2021063001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 726, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/06/26/726-describing-john-lennon-adjectives-of-personality-a-i-with-antony-rotunno/", + "post_title": "726. Describing John Lennon _ Adjectives of Personality A-I (with Antony Rotunno)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.531936Z", + "index": 2021062601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/06/22/bonus-euro2020-swapcast-with-martin-johnston-rnr-zdenek-lukas-zep/", + "post_title": "BONUS_ EURO2020 Swapcast with Martin Johnston (RnR) & Zdenek Lukas (ZEP) Parts 1 & 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.529937Z", + "index": 2021062201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 725, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/06/17/725-fun-games-for-learning-english-with-vickie-kelty/", + "post_title": "725. Fun & Games for Learning English with Vickie Kelty", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.527938Z", + "index": 2021061701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/06/16/unboxing-my-shiny-youtube-award-for-100000-subscribers-audio-and-video-versions/", + "post_title": "Unboxing my Shiny YouTube Award for 100,000 Subscribers (Audio and Video Versions)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.521939Z", + "index": 2021061601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 724, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/06/11/724-the-mountain-short-story-video/", + "post_title": "724. The Mountain (Short Story) + Video", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.524933Z", + "index": 2021061101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 723, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/06/04/723-bahar-from-iran-wisbolep-runner-up/", + "post_title": "723. Bahar from Iran (WISBOLEP Runner-Up)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.518940Z", + "index": 2021060401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 722, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/05/29/722-discussing-john-lennon-with-antony-rotunno/", + "post_title": "722. Discussing John Lennon with Antony Rotunno", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.516941Z", + "index": 2021052901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 721, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/05/24/721-collins-dictionary-word-quizzes-with-fred-eyangoh/", + "post_title": "721. Collins Dictionary Word Quizzes _ Confusing Words with Fred Eyangoh", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.514941Z", + "index": 2021052401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 720, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/05/18/720-how-fred-learns-vocabulary-with-the-new-york-times-spelling-bee-with-fred-eyangoh/", + "post_title": "720. How Fred Learns Vocabulary with the New York Times Spelling Bee (with Fred Eyangoh)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.512942Z", + "index": 2021051801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 719, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/05/10/719-amber-paul-are-on-the-podcast/", + "post_title": "719. Amber & Paul are on the Podcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.510944Z", + "index": 2021051001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 718, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/05/03/718-michael-the-shaman-wisbloep-runner-up/", + "post_title": "718. Michael the Shaman (WISBLOEP Runner-Up)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.508945Z", + "index": 2021050301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 717, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/04/27/717-gills-book-club-one-two-three-four-the-beatles-in-time-by-craig-brown/", + "post_title": "717. Gill\u2019s Book Club_ \u201cOne Two Three Four \u2013 The Beatles In Time\u201d by Craig Brown", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.505944Z", + "index": 2021042701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 716, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/04/22/716-interview-with-a-pop-star-from-the-1960s-megan-brady-from-the-applejacks/", + "post_title": "716. Interview with a Pop Star from the 1960s \u2013 Megan Brady from The Applejacks", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.502946Z", + "index": 2021042201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 715, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/04/16/715-catching-up-with-craig-wealand-lep-airc-swapcast/", + "post_title": "715. Catching up with Craig Wealand [LEP_AIRC Swapcast]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.500945Z", + "index": 2021041601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 713, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/04/07/713-lucky-dip-with-paul-taylor/", + "post_title": "713. Lucky Dip with Paul Taylor", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.443960Z", + "index": 2021040701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 712, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/04/03/712-a-chat-with-charlie-baxter/", + "post_title": "712. A Chat with Charlie Baxter", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.440960Z", + "index": 2021040301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 710, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/03/17/710-the-umbrella-man-by-roald-dahl-short-story/", + "post_title": "710. The Umbrella Man by Roald Dahl (Short Story)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.373988Z", + "index": 2021031701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 709, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/03/11/709-the-stoicism-of-groundhog-day-with-mum/", + "post_title": "709. The Stoicism of Groundhog Day (with Mum)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.370985Z", + "index": 2021031101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 708, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/03/05/708-tasha-liu-from-china-wisbolep-runner-up/", + "post_title": "708. Tasha Liu from China (WISBOLEP Runner-Up)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.368990Z", + "index": 2021030501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 707, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/03/01/707-2-2-lets-play-another-text-adventure-game-zombolocaust-by-peter-carlson/", + "post_title": "707. [2_2] Let\u2019s Play Another Text Adventure Game \u2013 \u201cZombolocaust\u201d by Peter Carlson", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.365990Z", + "index": 2021030101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 706, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/02/27/706-1-2-lets-play-another-text-adventure-game-zombolocaust-by-peter-carlson/", + "post_title": "706. [1_2] Let\u2019s Play Another Text Adventure Game \u2013 \u201cZombolocaust\u201d by Peter Carlson", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.363990Z", + "index": 2021022701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 705, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/02/24/705-kate-billington-returns-and-she-brought-cake/", + "post_title": "705. Kate Billington Returns (and she brought cake)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.361991Z", + "index": 2021022401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 704, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/02/11/704-the-rick-thompson-report-brexit-update-february-2021/", + "post_title": "704. The Rick Thompson Report_ Brexit Update (February 2021)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.359994Z", + "index": 2021021101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 702, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/01/25/702-emergency-questions-with-james/", + "post_title": "702. Emergency Questions (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.305010Z", + "index": 2021012501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 701, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/01/19/701-legal-english-with-louise-kulbicki/", + "post_title": "701. Legal English with Louise Kulbicki", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.302011Z", + "index": 2021011901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 700, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/01/13/700-marooned-with-my-music-luke-thompson/", + "post_title": "700. Marooned With My Music_ Luke Thompson", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.300011Z", + "index": 2021011301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 699, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2021/01/07/699-welcome-back-to-lukes-english-podcast-faq-january-2021/", + "post_title": "699. Welcome (back) to Luke\u2019s English Podcast _ FAQ (January 2021)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.298012Z", + "index": 2021010701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 698, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/12/23/698-paul-is-on-the-podcast-random-questions-with-paul-taylor/", + "post_title": "698. Paul is on the Podcast _ Random Questions with Paul Taylor", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.295014Z", + "index": 2020122301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 697, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/12/18/697-11-christmas-cracker-jokes-for-2020-explained/", + "post_title": "697. 11 Christmas Cracker Jokes for 2020, Explained", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.293014Z", + "index": 2020121801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 696, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/12/16/696-wisbolep-competition-results-ramble/", + "post_title": "696. WISBOLEP Competition Results + RAMBLE", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.291014Z", + "index": 2020121601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 695, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/12/11/695-pronunciation-pragmatics-procrastination-with-emma/", + "post_title": "695. Pronunciation, Pragmatics & Procrastination with Emma", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.289015Z", + "index": 2020121101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 694, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/12/07/694-the-crown-the-royal-family-a-royal-ramble-with-my-wife/", + "post_title": "694. The Crown _ The Royal Family (A Royal Ramble with My Wife)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.286017Z", + "index": 2020120701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 693, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/11/30/693-english-with-lucy-a-conversation-with-lucy-earl/", + "post_title": "693. English With Lucy _ A Conversation with Lucy Earl", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.284017Z", + "index": 2020113001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 692, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/11/23/wisbolep/", + "post_title": "692. WISBOLEP Competition Entries \u2013 Listen & Vote!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.281018Z", + "index": 2020112301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 691, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/11/18/691-jerome-butler-dialect-coach/", + "post_title": "691. Jerome Butler \u2013 Dialect Coach", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.279019Z", + "index": 2020111801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 690, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/11/12/690-urban-vs-rural-living-abroad-cultural-differences-with-cara-leopold/", + "post_title": "690. Urban vs Rural _ Living Abroad _ Cultural Differences (with Cara Leopold)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.277019Z", + "index": 2020111201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 689, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/11/06/689-baking-cakes-telling-jokes-speaking-chinese-with-kate-billington/", + "post_title": "689. Baking Cakes, Telling Jokes & Speaking Chinese with Kate Billington", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.275020Z", + "index": 2020110601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 688, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/11/02/689-sean-connery/", + "post_title": "688. Sean Connery", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.272022Z", + "index": 2020110201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 687, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/10/29/687-wisbolep-problem-polite-requests-an-inspiring-email-fly-me-to-the-moon/", + "post_title": "687. WISBOLEP Problem _ Polite Requests _ An Inspiring Email _ Fly Me To the Moon", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.269022Z", + "index": 2020102901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 686, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/10/27/686-christian-from-canguro-english/", + "post_title": "686. Christian from Canguro English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.267023Z", + "index": 2020102701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 685, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/10/21/685-raising-bilingual-children-1-alex-and-his-daughter-alice-in-moscow/", + "post_title": "685. Raising Bilingual Children [1] Alex and his daughter Alice, in Moscow", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.265023Z", + "index": 2020102101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 684, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/10/15/684-chasing-the-tangent-train-with-elspeth-graty/", + "post_title": "684. Chasing the Tangent Train with Elspeth Graty", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.263024Z", + "index": 2020101501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 683, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/10/09/683-feelgood-stories-of-flirting-with-marie-connolly/", + "post_title": "683. Feelgood Stories of Flirting with Marie Connolly", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.260024Z", + "index": 2020100901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 682, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/09/25/682-key-features-of-english-accents-explained/", + "post_title": "682. Key Features of English Accents, Explained", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.258025Z", + "index": 2020092501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 681, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/09/16/681-new-competition-why-i-should-be-on-lep-wisbolep-story-the-first-time-i-said-fck/", + "post_title": "681. New Competition_ Why I Should Be On LEP (WISBOLEP) _ Story_ The First Time I Said F_ck", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.256026Z", + "index": 2020091601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 680, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/09/09/680-park-life-a-year-in-the-wildlife-of-an-urban-park-by-rick-thompson-animal-collective-nouns/", + "post_title": "680. Park Life \u2013 A Year in The Wildlife Of An Urban Park (by Rick Thompson) _ Animal Collective Nouns", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.252027Z", + "index": 2020090901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 679, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/09/04/679-gills-book-club-a-gentleman-in-moscow/", + "post_title": "679. Gill\u2019s Book Club_ A Gentleman In Moscow", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.250028Z", + "index": 2020090401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 678, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/08/28/678-the-vintage-furniture-trade-in-london-with-howard-roach/", + "post_title": "678. The Vintage Furniture Trade in London (with Howard Roach)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.248029Z", + "index": 2020082801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 677, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/08/21/677-a-post-holiday-ramble-holiday-vocab-stories/", + "post_title": "677. A Post-Holiday Ramble _ Holiday Vocab _ Stories", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.246029Z", + "index": 2020082101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 676, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/08/01/676-david-crystal-lets-talk-how-english-conversation-works/", + "post_title": "676. David Crystal_ Let\u2019s Talk \u2013 How English Conversation Works", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.243030Z", + "index": 2020080101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 675, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/07/24/675-an-unplanned-pre-holiday-ramble-july-2020/", + "post_title": "675. An Unplanned Pre-Holiday Ramble (July 2020)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.241032Z", + "index": 2020072401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 674, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/07/16/674-19-amusing-insurance-claims-car-crash-vocabulary/", + "post_title": "674. 19 Amusing Insurance Claims _ Car Crash Vocabulary", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.238029Z", + "index": 2020071601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 673, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/07/07/673-conspiracies-ufos-life-hacks-with-james/", + "post_title": "673. Conspiracies _ UFOs _ Life Hacks (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.235033Z", + "index": 2020070701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 672, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/07/03/672-the-rick-thompson-report-covid-brexit-blm-july-2020/", + "post_title": "672. The Rick Thompson Report_ COVID _ BREXIT _ BLM (July 2020)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.233034Z", + "index": 2020070301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 671, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/06/30/671-aussie-english-with-pete-smissen/", + "post_title": "671. Aussie English with Pete Smissen", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.231035Z", + "index": 2020063001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 670, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/06/22/670-language-learning-with-james-harris/", + "post_title": "670. Language Learning with James Harris", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.228036Z", + "index": 2020062201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 669, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/06/18/669-how-to-learn-english/", + "post_title": "669. How to Learn English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.226036Z", + "index": 2020061801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 668, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/06/13/668-lep-live-ask-me-anything-hang-out-with-luke-audio-version/", + "post_title": "668. LEP LIVE! Ask Me Anything _ Hang Out With Luke (AUDIO VERSION)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.224032Z", + "index": 2020061301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 667, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/06/08/667-four-way-call-with-alex-moz-paul/", + "post_title": "667. Four Way Call (with Alex, Moz & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.221034Z", + "index": 2020060801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/06/07/announcement-im-doing-a-youtube-live-stream-on-wednesday-10-june-at-3pm-cet/", + "post_title": "Announcement_ I\u2019m doing a YouTube Live Stream on Wednesday 10 June at 3PM CET", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.218039Z", + "index": 2020060701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 666, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/05/29/666-part-3-favourite-scary-films-with-james/", + "post_title": "666. [Part 3] Favourite Scary Films (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.215040Z", + "index": 2020052901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 666, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/05/27/666-part-2-frightening-experiences-with-james/", + "post_title": "666. [Part 2] Frightening Experiences (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.213041Z", + "index": 2020052701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 666, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/05/25/666-part-1-the-number-of-the-beast-scary-music-black-sabbath-with-james/", + "post_title": "666. [Part 1] The Number of the Beast _ Scary Music _ Black Sabbath (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.211041Z", + "index": 2020052501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 665, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/05/20/665-a-chinwag-with-sebastian-marx-18-british-slang-phrases-that-americans-dont-understand/", + "post_title": "665. A Chinwag with Sebastian Marx _ 18+ British slang phrases that Americans don\u2019t understand", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.209044Z", + "index": 2020052001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 664, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/05/15/664-lockdown-ramble-with-my-wife/", + "post_title": "664. Lockdown Ramble with My Wife", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.206042Z", + "index": 2020051501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 663, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/05/04/663-the-lockdown-lying-game-with-amber-paul/", + "post_title": "663. The Lockdown Lying Game with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.203043Z", + "index": 2020050401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 662, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/04/29/662-catching-up-with-amber-paul-10-surviving-lockdown-with-kids/", + "post_title": "662. Catching Up with Amber & Paul #10 (Surviving Lockdown with Kids)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.201039Z", + "index": 2020042901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 661, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/04/17/661-an-englishman-in-los-angeles-headhunted-by-netflix-divided-by-a-common-language-with-oli-thompson/", + "post_title": "661. An Englishman in Los Angeles (with Oli)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.199040Z", + "index": 2020041701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 660, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/04/14/660-using-tv-series-films-to-improve-your-english/", + "post_title": "660. Using TV Series & Films to Improve Your English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.196045Z", + "index": 2020041401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 659, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/04/11/659-lockdown-chat-with-cara-leopold/", + "post_title": "659. Lockdown Chat with Cara Leopold", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.193046Z", + "index": 2020041101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 658, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/04/08/658-2-2-why-do-brits-sing-with-american-accents/", + "post_title": "658. [2_2] Why do Brits sing with American accents_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.191042Z", + "index": 2020040801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 657, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/04/07/657-1-2-why-do-brits-sing-with-american-accents/", + "post_title": "657. [1_2] Why do Brits sing with American accents_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.188045Z", + "index": 2020040701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 656, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/03/31/656-british-comedy-karl-pilkingtons-monkey-news-the-ricky-gervais-show/", + "post_title": "656. British Comedy_ Karl Pilkington\u2019s Monkey News _ The Ricky Gervais Show", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.185049Z", + "index": 2020033101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 655, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/03/28/655-coping-with-isolation-describing-feelings-and-emotions-vocabulary-experiences/", + "post_title": "655. Coping with Isolation _ Describing Feelings and Emotions \u2013 Vocabulary & Experiences", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.183049Z", + "index": 2020032801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 654, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/03/23/654-computer-based-ielts-stories-about-the-first-time-with-jessica-beck-from-ielts-energy-podcast/", + "post_title": "654. Computer-based IELTS _ Stories about The First Time\u2026 (with Jessica Beck from IELTS Energy Podcast)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.181051Z", + "index": 2020032301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 653, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/03/20/653-gills-book-club-the-five-the-untold-lives-of-the-women-killed-by-jack-the-ripper-by-hallie-rubenhold/", + "post_title": "653. Gill\u2019s Book Club \u2013 \u201cThe Five_ The Untold Lives of the Women Killed by Jack the Ripper\u201d by Hallie Rubenhold _ How to read books to improve your English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.178052Z", + "index": 2020032001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 652, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/03/13/652-the-rick-thompson-report-coronavirus-covid-19/", + "post_title": "652. The Rick Thompson Report_ Coronavirus (COVID-19)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.176053Z", + "index": 2020031302, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 651, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/03/13/651-coronavirus-covid-19-vocabulary/", + "post_title": "651. Coronavirus (COVID-19) Vocabulary", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.174053Z", + "index": 2020031301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 650, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/03/10/650-british-music-jungle-with-james/", + "post_title": "650. British Music_ Jungle (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.172054Z", + "index": 2020031001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 649, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/03/05/649-an-unedited-ramble-march-2020-never-explain-never-apologise-no-stress-method-to-the-madness-3-songs-on-guitar/", + "post_title": "649. An Unedited Ramble (March 2020) Never Explain, Never Apologise_ _ No Stress _ Method To The Madness _ 3 Songs on Guitar", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.169054Z", + "index": 2020030501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 648, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/02/24/648-ian-moore-returns/", + "post_title": "648. Ian Moore Returns", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.166055Z", + "index": 2020022401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 647, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/02/21/647-british-comedy-alan-partridge-part-6/", + "post_title": "647. British Comedy_ Alan Partridge (Part 6)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.164057Z", + "index": 2020022101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 646, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/02/20/646-british-comedy-alan-partridge-part-5/", + "post_title": "646. British Comedy_ Alan Partridge (Part 5)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.162056Z", + "index": 2020022001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 645, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/02/17/645-british-comedy-alan-partridge-part-4/", + "post_title": "645. British Comedy_ Alan Partridge (Part 4)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.160058Z", + "index": 2020021701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 644, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/02/14/644-the-rick-thompson-report-is-brexit-done/", + "post_title": "644. The Rick Thompson Report_ Is Brexit Done_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.158058Z", + "index": 2020021401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 643, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/02/11/643-the-intercultural-communication-dance-with-sherwood-fleming/", + "post_title": "643. The Intercultural Communication Dance with Sherwood Fleming", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.155059Z", + "index": 2020021101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 642, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/02/06/642-the-lying-game-returns-with-amber-paul/", + "post_title": "642. The Lying Game Returns (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.152055Z", + "index": 2020020601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 641, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/02/02/641-catching-up-with-amber-paul-9/", + "post_title": "641. Catching Up with Amber & Paul #9", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.150056Z", + "index": 2020020201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 640, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/01/28/640-ielts-speaking-success-with-keith-ohare/", + "post_title": "640. IELTS Speaking Success with Keith O\u2019Hare", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.147061Z", + "index": 2020012801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 639, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/01/23/639-3-quintessentially-british-books-that-you-might-not-know-about-with-mum/", + "post_title": "639. 3 Quintessentially British Books (that you might not know about) with Mum", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.145062Z", + "index": 2020012301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 638, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/01/19/638-3-quintessentially-british-things-that-you-might-not-know-about-with-dad/", + "post_title": "638. 3 Quintessentially British Things (that you might not know about) with Dad", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.143063Z", + "index": 2020011901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 637, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/01/14/637-5-quintessentially-english-things-that-you-might-not-know-about-with-james/", + "post_title": "637. 5 Quintessentially English Things (that you might not know about) with James", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.141063Z", + "index": 2020011401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 636, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/01/10/636-james-luke-discuss-star-wars-ix-spoilers-final-star-wars-episode-ever/", + "post_title": "636. James & Luke Discuss Star Wars IX (SPOILERS) Final Star Wars Episode Ever_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.138066Z", + "index": 2020011001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 635, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/01/08/635-a-new-year-ramble-for-2020-part-2-motivation-new-years-rules-bilingual-daughter-neil-innes/", + "post_title": "635. A New Year Ramble for 2020 (Part 2) Motivation _ New Year\u2019s Rules _ Bilingual Daughter _ Neil Innes", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.135065Z", + "index": 2020010801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 634, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2020/01/06/634-a-new-year-ramble-for-2020-part-1/", + "post_title": "634. A New Year Ramble for 2020 (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.133067Z", + "index": 2020010601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 633, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/12/18/633-star-wars-ix-the-rise-of-skywalker-spoiler-review/", + "post_title": "633. Star Wars IX_ The Rise of Skywalker (SPOILER REVIEW)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.131068Z", + "index": 2019121801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 632, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/12/17/632-star-wars-ix-the-rise-of-skywalker-no-spoilers/", + "post_title": "632. Star Wars IX_ The Rise of Skywalker (No Spoilers!)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.129069Z", + "index": 2019121701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 631, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/12/16/631-29-awful-christmas-jokes-explained/", + "post_title": "631. 29 Awful Christmas Jokes, Explained", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.127068Z", + "index": 2019121601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 630, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/12/09/630-the-english-guy-with-a-sitcom-on-japanese-tv-with-bj-fox/", + "post_title": "630. The English Guy with a Sitcom on Japanese TV (with BJ Fox)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.124069Z", + "index": 2019120901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 629, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/12/02/629-do-you-ever-with-james-strange-habits-funny-observations/", + "post_title": "629. Do you ever \u2026 _ (with James) Strange Habits & Funny Observations", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.122070Z", + "index": 2019120201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 628, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/11/26/628-oasis-with-james/", + "post_title": "628. OASIS (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.119066Z", + "index": 2019112601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 627, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/11/19/627-eminas-long-journey-to-english-proficiency/", + "post_title": "627. Emina\u2019s Long Journey to English Proficiency", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.116072Z", + "index": 2019111901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 626, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/11/13/626-the-rick-thompson-report-boris-johnsons-brexit-deal-general-election-football/", + "post_title": "626. The Rick Thompson Report_ Boris Johnson\u2019s Brexit Deal _ General Election _ Football", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.114072Z", + "index": 2019111302, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 625, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/11/13/625-88-english-expressions-that-will-confuse-everyone-part-2/", + "post_title": "625. 88 English expressions that will confuse everyone (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.112073Z", + "index": 2019111301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 624, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/11/07/624-88-english-expressions-that-will-confuse-everyone-part-1/", + "post_title": "624. 88 English expressions that will confuse everyone (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.110074Z", + "index": 2019110701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 623, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/10/29/623-13-terrible-jokes-explained/", + "post_title": "623. 13 Terrible Jokes, Explained", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.107075Z", + "index": 2019102901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 622, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/10/22/422-general-ramble-oct-2019-learning-english-politics-recording-setup-book-recommendation-beatles-star-wars-bill-bailey/", + "post_title": "622. General Ramble (Oct 2019) Learning English _ Politics _ Recording Setup _ Book Recommendation _ Beatles _ Star Wars _ Bill Bailey", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.105076Z", + "index": 2019102201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 621, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/10/14/621-british-tv-dragons-den-part-3-discord-in-the-den/", + "post_title": "621. British TV_ Dragons\u2019 Den (Part 3) Discord in the Den", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.102076Z", + "index": 2019101401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 620, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/10/11/620-british-tv-dragons-den-part-2-negotiation/", + "post_title": "620. British TV_ Dragons\u2019 Den (Part 2) Negotiation", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.100078Z", + "index": 2019101101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 619, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/10/09/619-british-tv-dragons-den-part-1-vocabulary/", + "post_title": "619. British TV_ Dragons\u2019 Den (Part 1) Vocabulary", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.098078Z", + "index": 2019100901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 618, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/09/30/618-the-climate-crisis-explained-in-10-charts-with-cara-leopold/", + "post_title": "618. The Climate Crisis Explained in 10 Charts (with Cara Leopold)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.095078Z", + "index": 2019093001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 617, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/09/26/617-sales-and-advertising-with-paul-taylor/", + "post_title": "617. Sales and Advertising (with Paul Taylor)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.093080Z", + "index": 2019092601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 616, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/09/23/616-can-you-find-the-15-idioms-with-paul-taylor/", + "post_title": "616. Can you find the 15 idioms_ (with Paul Taylor)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.091080Z", + "index": 2019092301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 615, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/09/17/615-paul-taylor-became-a-dad-and-you-wont-believe-what-happened-next/", + "post_title": "615. Paul Taylor Became a Dad, and you won\u2019t believe what happened next", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.089081Z", + "index": 2019091701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 614, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/09/13/614-another-murder-mystery-detective-story-part-3/", + "post_title": "614. Another Murder Mystery Detective Story (Part 3)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.086083Z", + "index": 2019091301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 613, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/09/09/613-another-murder-mystery-detective-story-part-2/", + "post_title": "613. Another Murder Mystery Detective Story (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.083082Z", + "index": 2019090901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 612, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/09/06/612-another-murder-mystery-detective-story-part-1/", + "post_title": "612. Another Murder Mystery Detective Story (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.081083Z", + "index": 2019090601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 611, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/09/03/611-top-10-jokes-from-edinburgh-fringe-2019/", + "post_title": "611. Top 10 Jokes from Edinburgh Fringe 2019", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.079084Z", + "index": 2019090301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 610, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/08/30/610-british-comedy-james-acaster/", + "post_title": "610. British Comedy_ James Acaster", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.077084Z", + "index": 2019083001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 609, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/08/28/609-the-lep-meetup-in-london-brexit-talking-to-my-daughter/", + "post_title": "609. The LEP MeetUp in London _ Brexit _ Talking to my Daughter", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.075085Z", + "index": 2019082801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 608, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/08/21/608-the-mass-observation-with-mum/", + "post_title": "608. The Mass Observation (with Mum)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.072081Z", + "index": 2019082101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 607, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/08/09/607-the-rick-thompson-report-boris-johnson-pm-no-deal-brexit/", + "post_title": "607. The Rick Thompson Report_ Boris Johnson PM _ No Deal Brexit_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.069082Z", + "index": 2019080901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 606, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/07/25/606-the-english-seaside-with-james/", + "post_title": "606. The English Seaside (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.067083Z", + "index": 2019072501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 605, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/07/18/605-unexpected-road-trip-with-james/", + "post_title": "605. Unexpected Road Trip (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.064084Z", + "index": 2019071801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 604, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/07/05/604-london-native-speaker-interviews-revisited-part-2/", + "post_title": "604. London Native Speaker Interviews REVISITED Part 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.062085Z", + "index": 2019070501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 603, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/07/01/603-queen-freddie-mercury-bohemian-rhapsody/", + "post_title": "603. Queen _ Freddie Mercury _ Bohemian Rhapsody", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.060085Z", + "index": 2019070101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 602, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/06/27/602-british-comedy-the-day-today-part-2/", + "post_title": "602. British Comedy_ The Day Today (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.058086Z", + "index": 2019062701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 601, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/06/24/601-british-comedy-the-day-today-part-1/", + "post_title": "601. British Comedy_ The Day Today (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.055088Z", + "index": 2019062401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/06/18/quick-hello-opp-living-through-comedy-somewhere-else-dreamin/", + "post_title": "Quick Hello _ OPP _ Living Through Comedy _ Somewhere Else Dreamin\u2019", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.052093Z", + "index": 2019061801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 600, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/06/08/600-episode-600-youtube-livestream-ask-me-anything/", + "post_title": "600. Episode 600 YouTube Livestream \u2013 Ask Me Anything", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.050095Z", + "index": 2019060801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 599, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/06/03/599-oliver-gee-returns-with-stories-to-tell/", + "post_title": "599. Oliver Gee Returns with Stories to Tell", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.048089Z", + "index": 2019060301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 598, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/05/28/598-the-rick-thompson-report-eu-elections-theresa-may-brexit-football/", + "post_title": "598. The Rick Thompson Report_ EU Elections _ Theresa May _ Brexit _ Football", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.045095Z", + "index": 2019052801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/05/27/hello-here-are-the-details-of-the-episode-600-youtube-live-stream/", + "post_title": "Hello! Here are the details of the Episode 600 YouTube live stream", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.043097Z", + "index": 2019052701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 597, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/05/23/597-growing-up-getting-older-becoming-a-father-with-paul-taylor/", + "post_title": "597. Growing Up _ Getting Older _ Becoming a Father (with Paul Taylor)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.041096Z", + "index": 2019052301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 596, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/05/20/596-sleep-with-amber-paul/", + "post_title": "596. SLEEP with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.038093Z", + "index": 2019052001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 595, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/05/15/595-andy-johnson-returns-part-2-eating-tv-series-football-music/", + "post_title": "595. Andy Johnson Returns (Part 2) Eating _ TV Series _ Football _ Music", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.034094Z", + "index": 2019051501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 594, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/05/13/594-andy-johnson-returns-part-1-moving-house-london-vs-canterbury-english-teaching/", + "post_title": "594. Andy Johnson Returns (Part 1) Moving House _ London vs Canterbury _ English Teaching", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.032094Z", + "index": 2019051301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 593, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/05/10/593-going-through-pages-in-an-old-diary/", + "post_title": "593. Going through pages in an old diary", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.030095Z", + "index": 2019051001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 592, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/05/07/592-it-always-seems-impossible-until-its-done/", + "post_title": "592. It always seems impossible until it\u2019s done", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.027101Z", + "index": 2019050701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 591, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/04/29/591-london-native-speaker-interviews-revisited-part-1/", + "post_title": "591. London Native Speaker Interviews REVISITED (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.025102Z", + "index": 2019042901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 590, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/04/24/590-film-club-avengers-endgame-marvel-cinematic-universe-with-fred-eyangoh/", + "post_title": "590. [2_2] Film Club_ Avengers Endgame _ Marvel Cinematic Universe (with Fred Eyangoh)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.023103Z", + "index": 2019042401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 589, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/04/23/589-film-club-avengers-endgame-marvel-cinematic-universe-with-fred-eyangoh/", + "post_title": "589. Film Club_ Avengers Endgame _ Marvel Cinematic Universe (with Fred Eyangoh)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.020098Z", + "index": 2019042301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 588, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/04/19/588-punctuation-rules-book-review-part-2-apostrophe-full-stop-comma/", + "post_title": "588. Punctuation Rules _ Book Review (Part 2) Apostrophe, Full Stop, Comma", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.017104Z", + "index": 2019041901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 587, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/04/18/587-punctuation-rules-book-review-part-1/", + "post_title": "587. Punctuation Rules _ Book Review (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.015104Z", + "index": 2019041801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/04/12/its-leps-10th-birthday/", + "post_title": "It\u2019s LEP\u2019s 10th Birthday!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.013105Z", + "index": 2019041201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 586, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/04/06/586-the-importance-of-listening/", + "post_title": "586. The Importance of Listening", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.011107Z", + "index": 2019040601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 585, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/03/29/585-alternative-british-citizenship-tests-with-paul-taylor/", + "post_title": "585. Alternative British Citizenship Tests with Paul Taylor", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.009103Z", + "index": 2019032901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 584, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/03/25/584-posh-or-not-posh-part-3-with-amber-paul/", + "post_title": "584. Posh or not posh_ (Part 3) with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.006109Z", + "index": 2019032501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 583, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/03/20/583-british-comedy-the-dirty-fork-restaurant-sketch-monty-python/", + "post_title": "583. British Comedy_ The Dirty Fork _ Restaurant Sketch (Monty Python)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.003109Z", + "index": 2019032001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 582, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/03/15/582-posh-or-not-posh-part-2-guess-the-posh-british-celebrities/", + "post_title": "582. Posh or not posh_ (Part 2) Guess the Posh British Celebrities", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:31.001110Z", + "index": 2019031501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 581, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/03/13/581-posh-or-not-posh-part-1-understanding-posh-people-and-posh-accents/", + "post_title": "581. Posh or not posh_ (Part 1) Understanding Posh People and Posh Accents", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.998110Z", + "index": 2019031301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 580, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/03/08/580-ramble-listener-comments-robots-vampires-two-taps-in-the-bathroom/", + "post_title": "580. Ramble _ Listener Comments _ Robots _ Vampires _ Two Taps in the Bathroom", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.996112Z", + "index": 2019030801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 579, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/03/01/579-2-2-ielts-qa-with-ben-worthington-from-ielts-podcast/", + "post_title": "579. [2_2] IELTS Q&A with Ben Worthington from IELTS Podcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.994113Z", + "index": 2019030101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 578, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/02/28/578-1-2-ielts-qa-with-ben-worthington-from-ielts-podcast/", + "post_title": "578. [1_2] IELTS Q&A with Ben Worthington from IELTS Podcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.991113Z", + "index": 2019022801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 577, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/02/14/577-uk-vs-us-slang-game-with-jennifer-from-english-across-the-pond/", + "post_title": "577. UK vs US Slang Game (with Jennifer from English Across the Pond)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.989111Z", + "index": 2019021401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/02/05/website-post-i-was-on-the-rock-roll-english-podcast-again-new-premium-episodes-coming-throughout-february/", + "post_title": "[Website post] I was on the Rock & Roll English Podcast again _ New Premium episodes coming throughout February", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.986114Z", + "index": 2019020501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 576, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/02/02/576-talking-about-comedy-books-films-music-with-james/", + "post_title": "576. Talking about Comedy, Books, Films & Music with James", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.983116Z", + "index": 2019020201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 575, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/01/30/575-british-comedy-paul-chowdhry/", + "post_title": "575. British Comedy_ Paul Chowdhry", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.981115Z", + "index": 2019013001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 574, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/01/25/574-2-2-the-rick-thompson-report-brexit-qa-january-2019/", + "post_title": "574. [2_2] The Rick Thompson Report_ Brexit Q&A (January 2019)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.979117Z", + "index": 2019012502, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 573, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/01/25/573-1-2-the-rick-thompson-report-brexit-update-january-2019/", + "post_title": "573. [1_2] The Rick Thompson Report_ Brexit Update (January 2019)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.977113Z", + "index": 2019012501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 572, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/01/20/572-worst-stand-up-gig-experiences-with-amber-paul/", + "post_title": "572. Worst Stand-up Gig Experiences (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.974118Z", + "index": 2019012001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 571, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/01/16/571-bill-burrs-hilarious-plane-story-enjoy-comedy-storytelling-in-english/", + "post_title": "571. Bill Burr\u2019s Hilarious Plane Story \u2013 Enjoy Comedy_Storytelling in English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.972119Z", + "index": 2019011601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 570, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/01/11/570-learning-teaching-english-with-zdenek-lukas-part-2/", + "post_title": "570. Learning & Teaching English with Zdenek Lukas (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.969120Z", + "index": 2019011102, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 569, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/01/11/569-learning-teaching-english-with-zdenek-lukas-part-1/", + "post_title": "569. Learning & Teaching English with Zdenek Lukas (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.967120Z", + "index": 2019011101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 568, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2019/01/07/568-what-is-lukes-english-podcast-and-how-can-it-help-you-with-your-english/", + "post_title": "568. What is Luke\u2019s English Podcast, and how can it help you with your English_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.965121Z", + "index": 2019010701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 567, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/12/21/567-alternative-christmas-stories-poems-beatles-happy-new-year-from-lep/", + "post_title": "567. Alternative Christmas Stories & Poems _ Beatles _ Happy New Year from LEP!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.962122Z", + "index": 2018122101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 566, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/12/19/566-the-collins-words-of-the-year-part-6-2018-with-amber-minogue/", + "post_title": "566. The Collins Words of the Year (Part 6) 2018 with Amber Minogue", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.960118Z", + "index": 2018121901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 565, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/12/17/565-the-collins-words-of-the-year-part-5-2018-with-amber-minogue/", + "post_title": "565. The Collins Words of the Year (Part 5) 2018 with Amber Minogue", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.958119Z", + "index": 2018121701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 564, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/12/13/564-the-collins-words-of-the-year-part-4/", + "post_title": "564. The Collins Words of the Year (Part 4)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.955120Z", + "index": 2018121301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 563, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/12/11/563-the-collins-words-of-the-year-part-3/", + "post_title": "563. The Collins Words of the Year (Part 3)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.952121Z", + "index": 2018121101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 562, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/12/10/562-the-collins-words-of-the-year-part-2/", + "post_title": "562. The Collins Words of the Year (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.950121Z", + "index": 2018121001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 561, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/12/07/561-the-collins-words-of-the-year-part-1/", + "post_title": "561. The Collins Words of the Year (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.948122Z", + "index": 2018120701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 560, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/12/03/560-sarah-donnelly-returns-writing-jokes-public-speaking-doing-comedy-in-another-language/", + "post_title": "560. Sarah Donnelly Returns \u2013 Writing jokes, public speaking, doing comedy in another language", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.945128Z", + "index": 2018120301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 559, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/11/20/559-the-rick-thompson-report-brexit-chaos-november-2018/", + "post_title": "559. The Rick Thompson Report_ Brexit Chaos (November 2018)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.943128Z", + "index": 2018112001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 558, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/11/15/558-rambling-in-the-new-sky-pod/", + "post_title": "558. Rambling in the new Sky-Pod", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.941130Z", + "index": 2018111501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/11/09/a-letter-from-luke-9-nov-2018/", + "post_title": "A Letter from Luke \u2013 9 Nov. 2018", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.938127Z", + "index": 2018110901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 557, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/10/29/557-im-a-rambling-guy-monologue-autumn-2018/", + "post_title": "557. I\u2019m a Rambling Guy (Monologue \u2013 Autumn 2018)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.935129Z", + "index": 2018102901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 556, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/10/24/556-with-jessica-beck-from-honestly-english/", + "post_title": "556. With Jessica Beck from Honestly English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.933127Z", + "index": 2018102401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 555, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/10/22/555-raphael-millers-summer-school-report/", + "post_title": "555. Raphael Miller\u2019s Summer School Report", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.931127Z", + "index": 2018102201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 554, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/10/18/554-odd-news-stories-with-mum-dad/", + "post_title": "554. ODD NEWS STORIES (with Mum & Dad)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.928133Z", + "index": 2018101801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 553, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/10/15/553-fighting-wildland-fires-with-benny-the-russian-firefighter/", + "post_title": "553. Fighting Wildland Fires with Benny the Russian Firefighter", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.926133Z", + "index": 2018101501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 552, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/10/05/552-discussing-comedy-culture-with-amber-paul/", + "post_title": "552. Discussing Comedy & Culture (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.924135Z", + "index": 2018100501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 551, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/10/01/551-catching-up-with-amber-paul-8-stereotypes/", + "post_title": "551. Catching Up with Amber & Paul #8 \u2013 Stereotypes", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.921131Z", + "index": 2018100101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 550, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/09/28/550-british-comedy-alan-partridge-part-3/", + "post_title": "550. British Comedy_ Alan Partridge (Part 3)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.919136Z", + "index": 2018092801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 549, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/09/26/549-british-comedy-alan-partridge-part-2/", + "post_title": "549. British Comedy_ Alan Partridge (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.916137Z", + "index": 2018092601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 548, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/09/25/548-british-comedy-alan-partridge-part-1/", + "post_title": "548. British Comedy_ Alan Partridge (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.914138Z", + "index": 2018092501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 547, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/09/19/547-best-jokes-from-the-edinburgh-festival-fringe/", + "post_title": "547. Best Jokes from the Edinburgh Festival Fringe", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.912138Z", + "index": 2018091901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 546, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/09/11/546-death-by-meteor/", + "post_title": "546. Death by Meteor", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.910139Z", + "index": 2018091101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 545, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/09/07/545-the-hitchhiker-by-roald-dahl-short-story/", + "post_title": "545. The Hitchhiker by Roald Dahl (Short Story)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.907141Z", + "index": 2018090701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 544, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/08/27/544-the-rick-thompson-report-no-deal-brexit/", + "post_title": "544. The Rick Thompson Report_ No Deal Brexit", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.905141Z", + "index": 2018082701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 543, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/08/23/543-britains-first-insect-restaurant-opens/", + "post_title": "543. Britain\u2019s First Insect Restaurant Opens", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.902141Z", + "index": 2018082301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 542, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/08/21/542-talking-rubbish-just-having-fun-with-the-thompsons/", + "post_title": "542. Talking Rubbish & Just Having Fun with The Thompsons", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.900142Z", + "index": 2018082101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 541, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/07/31/541-what-british-people-say-vs-what-they-mean/", + "post_title": "541. What British People Say vs What They Mean", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.898143Z", + "index": 2018073101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 540, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/07/21/540-whats-up-post-world-cup-news-lep-meetup-london-super-mario-earworms/", + "post_title": "540. What\u2019s Up_ Post World Cup _ News _ LEP Meetup London _ Super Mario Earworms", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.896143Z", + "index": 2018072101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 539, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/07/09/539-world-cup-2018-3-is-it-coming-home/", + "post_title": "539. World Cup 2018 [3] Is It Coming Home_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.893144Z", + "index": 2018070901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 538, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/07/05/538-world-cup-2018-2-the-second-round-listener-comments/", + "post_title": "538. World Cup 2018 [2] The Second Round _ Listener Comments", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.891145Z", + "index": 2018070501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 537, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/07/02/537-how-olly-richards-learns-a-language-part-2-intermediate-plateau-the-magic-of-story-pronunciation-personality-classroom-vs-self-guided-learning/", + "post_title": "537. How Olly Richards Learns a Language (Part 2) Intermediate Plateau _ The Magic of Story _ Pronunciation & Personality _ Classroom vs Self-Guided Learning", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.889146Z", + "index": 2018070201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 536, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/06/29/536-how-olly-richards-learns-a-language-part-1-compelling-material-input-based-learning/", + "post_title": "536. How Olly Richards Learns a Language (Part 1) Compelling Material _ Input-based Learning", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.886148Z", + "index": 2018062901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 535, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/06/26/535-world-cup-2018-1/", + "post_title": "535. World Cup 2018 [1]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.884147Z", + "index": 2018062601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/06/22/lep-premium-is-now-live-teacherluke-co-uk-premium/", + "post_title": "LEP PREMIUM is now live \u2013 teacherluke.co.uk_premium", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.881148Z", + "index": 2018062201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 534, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/06/15/534-sugar-sammy-interview-part-2-language-comedy/", + "post_title": "534. Sugar Sammy Interview (Part 2) Language & Comedy", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.879150Z", + "index": 2018061501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 533, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/06/13/533-sugar-sammy-interview-part-1-multilingual-comedian/", + "post_title": "533. Sugar Sammy Interview (Part 1) Multilingual Comedian", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.877150Z", + "index": 2018061301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 532, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/06/08/532-a-history-of-the-world-cup/", + "post_title": "532. A History of The World Cup", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.875150Z", + "index": 2018060801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 531, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/06/06/531-crime-vocabulary-quiz-with-moz/", + "post_title": "531. Crime Vocabulary Quiz (with Moz)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.873151Z", + "index": 2018060601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 530, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/06/03/530-more-murder-stories-with-moz/", + "post_title": "530. More Murder Stories (with Moz)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.870148Z", + "index": 2018060301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 529, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/05/29/529-the-m-word-with-andy-johnson/", + "post_title": "529. The \u201cM\u201d Word (with Andy Johnson)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.867154Z", + "index": 2018052901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 528, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/05/23/528-the-royal-wedding-with-mum/", + "post_title": "528. The Royal Wedding (with Mum)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.864154Z", + "index": 2018052301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 527, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/05/18/527-can-paul-taylor-pass-the-uk-citizenship-test/", + "post_title": "527. Can Paul Taylor Pass The UK Citizenship Test_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.862155Z", + "index": 2018051801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 526, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/05/15/526-being-a-tourist-with-paul-taylor/", + "post_title": "526. Being a Tourist (with Paul Taylor) + Video", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.860155Z", + "index": 2018051501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/05/14/31807/", + "post_title": "Please VOTE for LEP in the British Podcast Awards 2018 \u2013 Voting Ends on Thursday 17 May", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.858157Z", + "index": 2018051401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 525, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/05/08/525-ninja-august-podcast-corrections-useful-japanese-cat-listener-comments-questions/", + "post_title": "525. Ninja August _ Podcast Corrections _ Useful Japanese Cat (Listener Comments & Questions)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.856158Z", + "index": 2018050801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 524, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/05/04/524-tricky-pronunciation-debates-either-neither-grammar-nazi-sketch/", + "post_title": "524. Tricky Pronunciation Debates _ \u201cEither\u201d \u201cNeither\u201d _ Song + Comedy Sketch", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.852158Z", + "index": 2018050401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 523, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/04/24/523-tips-for-learning-english-with-films-tv-shows-with-cara-leopold/", + "post_title": "523. Tips for Learning English with Films & TV Shows (with Cara Leopold)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.850160Z", + "index": 2018042401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 522, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/04/18/522-learning-english-at-summer-school-in-the-uk-a-rambling-chat-with-raphael-miller/", + "post_title": "522. Learning English at Summer School in the UK (A Rambling Chat with Raphael Miller)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.848161Z", + "index": 2018041801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 521, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/04/13/520-talking-about-pets-with-james/", + "post_title": "521. Talking about Pets (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.846161Z", + "index": 2018041301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 520, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/04/03/520-idioms-game-chat-part-2-with-andy-johnson-18-more-idioms-vocab-items-explained/", + "post_title": "520. Idioms Game & Chat Part 2 (with Andy Johnson) + 18 More Idioms & Vocab Items Explained", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.843161Z", + "index": 2018040301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 519, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/03/29/519-idioms-game-chat-with-andy-johnson-25-idioms-explained/", + "post_title": "519. Idioms Game & Chat (with Andy Johnson) + 25 Idioms Explained", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.841161Z", + "index": 2018032901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 518, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/03/21/518-grammar-questions-part-1-present-perfect-continuous-future-continuous-language-of-newspaper-headlines/", + "post_title": "518. Grammar Questions (Part 1) Present Perfect Continuous _ Future Continuous _ Language of Newspaper Headlines", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.839162Z", + "index": 2018032101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 517, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/03/14/517-professor-stephen-hawking/", + "post_title": "517. Professor Stephen Hawking (An Obituary)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.836158Z", + "index": 2018031401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 516, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/03/10/516-paul-mccartneys-spider-story/", + "post_title": "516. Paul McCartney\u2019s Spider Story", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.834159Z", + "index": 2018031001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 515, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/03/06/515-becoming-maman-with-amber-sarah-bringing-up-children-the-french-way/", + "post_title": "515. Becoming \u201cMaman\u201d with Amber & Sarah \u2013 Bringing Up Children The French Way", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.831160Z", + "index": 2018030601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 514, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/03/01/514-whats-on-the-table-with-fred-alex/", + "post_title": "514. What\u2019s on the table_ (with Fred & Alex)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.829165Z", + "index": 2018030101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 513, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/02/23/513-general-ramble-news-comments/", + "post_title": "513. General Ramble _ News _ Comments", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.827166Z", + "index": 2018022301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/02/21/website-only-i-was-on-the-becoming-maman-podcast-with-amber-minogue-sarah-donnelly/", + "post_title": "[Website-only] I was on the \u201cBecoming Maman\u201d podcast with Amber Minogue & Sarah Donnelly", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.825167Z", + "index": 2018022101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 512, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/02/16/512-my-experiences-of-not-learning-french-part-2-learning-language-in-a-classroom-vs-learning-on-your-own/", + "post_title": "512. My Experiences of (not) Learning French [Part 2] Learning Language in a Classroom vs Learning On Your Own", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.822168Z", + "index": 2018021601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 511, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/02/13/511-my-experiences-of-not-learning-french-part-1/", + "post_title": "511. My Experiences of (not) Learning French [Part 1]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.819168Z", + "index": 2018021301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 510, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/02/05/510-philosophy-quiz-with-amber-paul/", + "post_title": "510. Philosophy Quiz (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.817170Z", + "index": 2018020501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 509, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/02/01/509-whats-it-all-about-philosophy-and-language-learning/", + "post_title": "509. What\u2019s it all about_ (Philosophy and Language Learning)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.815170Z", + "index": 2018020101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 508, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/01/27/508-six-true-crime-stories-from-victorian-england-told-by-my-dad/", + "post_title": "508. Six True Crime Stories from Victorian England, Told by My Dad", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.813170Z", + "index": 2018012701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 507, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/01/21/british-comedy-tv-shows-to-learn-english-some-british-comedy-tv-show-recommendations/", + "post_title": "507. Learning English with UK Comedy TV Shows", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.810171Z", + "index": 2018012101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 506, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/01/15/506-one-of-britains-favourite-poems/", + "post_title": "506. One of Britain\u2019s Favourite Poems", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.808172Z", + "index": 2018011501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 505, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/01/12/505-a-chat-with-dad-james-about-star-wars-the-last-jedi-with-vocabulary/", + "post_title": "505. A Chat with Dad & James about Star Wars_ The Last Jedi (with Vocabulary)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.806173Z", + "index": 2018011201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 504, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/01/11/504-my-review-of-star-wars-the-last-jedi-part-2/", + "post_title": "504. My Review of Star Wars_ The Last Jedi (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.803174Z", + "index": 2018011101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 503, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/01/10/503-my-review-of-star-wars-the-last-jedi-part-1/", + "post_title": "503. My Review of Star Wars_ The Last Jedi (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.800175Z", + "index": 2018011001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 502, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2018/01/03/502-the-birth-of-my-daughter/", + "post_title": "502. The Birth of My Daughter", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.798176Z", + "index": 2018010301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 501, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/12/24/501-merry-christmas-listener-correspondence/", + "post_title": "501. Merry Christmas! _ Listener Correspondence", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.796176Z", + "index": 2017122401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/12/22/observations-on-the-paris-metro-from-inside-the-metro-listen-to-my-appearance-on-oliver-gees-podcast-the-earful-tower/", + "post_title": "Observations on the Paris Metro\u2026 from Inside the Metro (Listen to my appearance on Oliver Gee\u2019s podcast \u201cThe Earful Tower\u201d)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.794177Z", + "index": 2017122201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 500, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/12/17/500-12-episode-500-celebration-part-1/", + "post_title": "500. EPISODE 500 CELEBRATION! (PARTS 1 & 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.792178Z", + "index": 2017121701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 499, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/12/11/499-prince-harry-meghan-markle-royal-family-quiz-with-amber/", + "post_title": "499. Prince Harry & Meghan Markle _ Royal Family Quiz (with Amber)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.789178Z", + "index": 2017121101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 498, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/12/08/498-the-rick-thompson-report-brexit-negotiations/", + "post_title": "498. The Rick Thompson Report_ Brexit Negotiations", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.786180Z", + "index": 2017120801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 497, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/12/04/497-film-club-withnail-i-with-james-and-will/", + "post_title": "497. Film Club_ Withnail & I (with James and Will)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.784180Z", + "index": 2017120401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 496, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/11/29/496-ramblecast/", + "post_title": "496. RAMBLECAST", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.782181Z", + "index": 2017112901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 495, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/11/26/495-australian-stereotypes-and-cliches-with-oliver-gee-didgeridoo-sounds/", + "post_title": "495. Australian Stereotypes and Cliches (with Oliver Gee) ~didgeridoo sounds~", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.779182Z", + "index": 2017112601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 494, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/11/21/494-who-wants-to-be-good-at-english-the-rematch-with-rick-thompson/", + "post_title": "494. Who Wants to be Good at English_ (The Rematch) with Rick Thompson", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.777182Z", + "index": 2017112101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 493, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/11/17/493-catching-up-with-amber-paul-7-human-pollution/", + "post_title": "493. Catching Up with Amber & Paul #7 (Human Pollution)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.775184Z", + "index": 2017111701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 492, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/11/12/492-becoming-a-dad-with-andy-ben-part-2/", + "post_title": "492. Becoming a Dad (with Andy & Ben) Part 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.772184Z", + "index": 2017111201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 491, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/11/08/491-becoming-a-dad-with-andy-ben-part-1/", + "post_title": "491. Becoming a Dad (with Andy & Ben) Part 1", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.769186Z", + "index": 2017110801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 490, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/11/03/490-discussing-friendship-with-martin-and-dan-the-man-from-rock-n-roll-english-friendship-phrasal-verbs/", + "post_title": "490. Discussing Friendship \u2013 with Martin and Dan The Man from Rock n\u2019 Roll English (Friendship Phrasal Verbs)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.767186Z", + "index": 2017110301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 489, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/10/30/489-a-rambling-conversation-with-mum-part-2-vocabulary/", + "post_title": "489. A Rambling Conversation with Mum (Part 2) + Vocabulary", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.765183Z", + "index": 2017103001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 488, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/10/26/488-a-rambling-conversation-with-mum-part-1-vocabulary/", + "post_title": "488. A Rambling Conversation with Mum (Part 1) + Vocabulary", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.762183Z", + "index": 2017102601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 487, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/10/22/487-learning-languages-and-adapting-to-new-cultures-with-ethan-from-reallife-english/", + "post_title": "487. Learning Languages and Adapting to New Cultures (with Ethan from RealLife English)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.760183Z", + "index": 2017102201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 485, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/10/13/difficult-words-to-pronounce-in-english-with-paul-taylor/", + "post_title": "485. & 486. Difficult Words to Pronounce in English (with Paul Taylor) (Parts 1 & 2) + video", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.757184Z", + "index": 2017101301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 484, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/10/08/484-try-not-to-laugh-on-the-bus-with-paul-taylor/", + "post_title": "484. Try not to Laugh on the Bus (with Paul Taylor)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.755186Z", + "index": 2017100801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/10/04/the-flat-earth-podcast-and-this-is-what-happened/", + "post_title": "I was invited onto The Flat Earth Podcast, and this is what happened\u2026 [Website only]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.752190Z", + "index": 2017100401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 483, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/10/01/483-a-rambling-chat-with-moz/", + "post_title": "483. A Rambling Chat with Moz", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.750192Z", + "index": 2017100101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 482, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/26/482-the-murder-mile-true-crime-podcast-with-moz-more-creepy-stories-of-murders-in-london/", + "post_title": "482. The Murder Mile True Crime Podcast (with Moz) More Creepy Stories of Murders in London", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.747192Z", + "index": 2017092601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/24/website-content-luke-on-the-real-life-english-podcast/", + "post_title": "[Website content] Luke on the RealLife English Podcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.745193Z", + "index": 2017092401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 481, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/20/481-holiday-diary-final-part-endeavour-to-persevere/", + "post_title": "481. Holiday Diary (Final Part) \u201cEndeavour to Persevere\u201d", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.742194Z", + "index": 2017092001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 480, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/18/480-holiday-diary-part-7-big-rocks/", + "post_title": "480. Holiday Diary (Part 7) BIG ROCKS!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.740194Z", + "index": 2017091801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 479, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/15/479-holiday-diary-part-6-the-madness-of-las-vegas-11-gambling-idioms/", + "post_title": "479. Holiday Diary (Part 6) The Madness of Las Vegas _ 11 Gambling Idioms", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.738193Z", + "index": 2017091501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 478, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/12/478-holiday-diary-part-5-an-encounter-with-the-church-of-scientology/", + "post_title": "478. Holiday Diary (Part 5) An Encounter with The Church of Scientology", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.735196Z", + "index": 2017091201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 477, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/09/477-holiday-diary-part-4-the-fresh-prince-of-bel-air/", + "post_title": "477. Holiday Diary (Part 4) The Fresh Prince of Bel Air", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.733198Z", + "index": 2017090901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 476, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/03/476-holiday-diary-part-3-astronomy-astrology-flat-earth-conspiracy-theory/", + "post_title": "476. Holiday Diary (Part 3) Astronomy, Astrology & Flat Earth Conspiracy Theory", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.731198Z", + "index": 2017090302, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 475, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/09/03/475-holiday-diary-part-2-modern-art-is-it-amazing-or-is-it-rubbish/", + "post_title": "475. Holiday Diary (Part 2) Modern Art_ Is it amazing, or is it rubbish_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.728199Z", + "index": 2017090301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 474, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/08/31/474-holiday-diary-part-1/", + "post_title": "474. Holiday Diary (Part 1) New Arrival, New Destinations", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.726199Z", + "index": 2017083101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 473, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/08/22/473-explaining-the-rules-of-cricket-with-dad/", + "post_title": "473. Explaining the Rules of Cricket (with Dad)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.678215Z", + "index": 2017082201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/08/18/website-only-star-wars-dvd-commentary-with-james/", + "post_title": "[Website Only] Star Wars DVD Commentary (with James) ___Contains swearing \u2013 Not suitable for Children___", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.675215Z", + "index": 2017081801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/08/15/why-does-the-uk-have-so-many-accents-recorded-february-2017/", + "post_title": "Why does the UK have so many accents_ (Recorded February 2017)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.673217Z", + "index": 2017081501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/08/14/website-content-lukes-criminal-past-zep-episode-185/", + "post_title": "Luke\u2019s Criminal Past (ZEP Episode 185)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.670213Z", + "index": 2017081401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 472, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/08/10/472-andy-johnson-at-the-london-school-of-english-part-2-why-andy-runs-marathons/", + "post_title": "472. Andy\u2019s Survival Story _ Why Andy Runs Marathons (with Andy Johnson)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.667214Z", + "index": 2017081001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 471, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/08/06/471-andy-johnson-at-the-london-school-of-english-part-1-lego-self-directed-learning-accents/", + "post_title": "471. Stepping on Lego, Self-directed Learning, Accents (with Andy Johnson)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.665220Z", + "index": 2017080601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/08/02/ive-got-something-to-tell-you-im-leaving/", + "post_title": "I\u2019m going on holiday \u2013 back in a few weeks!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.663221Z", + "index": 2017080201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 470, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/07/31/470-understanding-the-liverpool-accent/", + "post_title": "470. Understanding the Liverpool Accent", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.660216Z", + "index": 2017073101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 469, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/07/27/469-british-comedy-john-bishop/", + "post_title": "469. British Comedy_ John Bishop", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.658217Z", + "index": 2017072701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 468, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/07/24/468-punk-music-culture-with-james/", + "post_title": "468. Punk \u2013 Music & Culture (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.656222Z", + "index": 2017072401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 467, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/07/20/467-a-boiling-hot-evening-ramble-comments-questions/", + "post_title": "467. A Boiling-Hot Evening Ramble \u2013 Comments & Questions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.653218Z", + "index": 2017072001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 466, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/07/15/466-get-this-word-into-your-life/", + "post_title": "466. Get this word into your life", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.651223Z", + "index": 2017071501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 465, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/07/10/465-how-i-make-episodes-of-the-podcast-part-2/", + "post_title": "465. How I make episodes of the podcast (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.648224Z", + "index": 2017071001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 464, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/07/06/464-how-i-make-episodes-of-the-podcast-part-1/", + "post_title": "464. How I make episodes of the podcast (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.646225Z", + "index": 2017070601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 463, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/07/03/463-news-comments-questions/", + "post_title": "463. News, Comments & Questions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.644227Z", + "index": 2017070301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 462, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/28/462-british-comedy-bill-bailey/", + "post_title": "462. British Comedy_ Bill Bailey", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.642227Z", + "index": 2017062801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 461, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/24/461-25-deceptively-difficult-questions-with-amber-paul-sarah/", + "post_title": "461. 25 Deceptively Difficult Questions (with Amber, Paul & Sarah)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.640228Z", + "index": 2017062401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 460, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/20/460-catching-up-with-amber-paul-6-feat-sarah-donnelly/", + "post_title": "460. Catching Up With Amber & Paul #6 (feat. Sarah Donnelly)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.637225Z", + "index": 2017062001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 459, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/17/459-lazing-on-a-sunny-afternoon/", + "post_title": "459. Lazing on a Sunny Afternoon", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.634230Z", + "index": 2017061701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/15/i-was-on-the-rock-n-roll-english-podcast-and-the-earful-tower-podcast-this-week/", + "post_title": "[Website content] I was on The Rock n\u2019 Roll English Podcast and The Earful Tower Podcast this week", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.632231Z", + "index": 2017061501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 458, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/14/458-the-rick-thompson-report-post-election-2017/", + "post_title": "458. The Rick Thompson Report_ Post-Election 2017", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.630231Z", + "index": 2017061401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 457, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/09/457-conclusions-about-language-learning-from-the-david-crystal-interview-part-2/", + "post_title": "457. Conclusions about Language Learning from the David Crystal Interview (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.627231Z", + "index": 2017060902, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 456, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/09/456-conclusions-about-language-learning-from-the-david-crystal-interview-part-1/", + "post_title": "456. Conclusions about Language Learning from the David Crystal Interview (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.625232Z", + "index": 2017060901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 455, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/06/455-david-crystal-interview-part-2-questions-from-listeners/", + "post_title": "455. David Crystal Interview (Part 2) Questions from Listeners", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.623233Z", + "index": 2017060601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/06/01/30029/", + "post_title": "A Message from Amber", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.618235Z", + "index": 2017060101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 454, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/31/454-david-crystal-interview-part-1-professor-of-linguistics/", + "post_title": "454. David Crystal Interview (Part 1) Professor of Linguistics", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.616235Z", + "index": 2017053101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 453, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/27/453-the-36-questions-that-lead-to-love-with-amber-paul/", + "post_title": "453. The 36 Questions that Lead to Love (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.614236Z", + "index": 2017052701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 452, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/24/452-a-conversation-about-language-with-amber-paul/", + "post_title": "452. A Conversation About Language (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.572244Z", + "index": 2017052401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 451, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/22/451-film-club-alien-covenant/", + "post_title": "451. Film Club_ Alien Covenant", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.569250Z", + "index": 2017052201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 450, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/16/450-comments-questions/", + "post_title": "450. Comments & Questions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.566252Z", + "index": 2017051601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 449, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/13/449-film-club-touching-the-void-part-2/", + "post_title": "449. Film Club_ Touching the Void (Part 2) Learning a Language is Like Climbing a Mountain", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.564253Z", + "index": 2017051301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 448, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/12/448-film-club-touching-the-void-part-1/", + "post_title": "448. Film Club_ Touching The Void (Part 1) Learning a Language is Like Climbing a Mountain", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.562253Z", + "index": 2017051201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 447, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/08/447-what-is-this-british-humour/", + "post_title": "447. What is this, British Humour_ (with Amber Minogue)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.560256Z", + "index": 2017050801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 446, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/05/446-british-tv-top-gear/", + "post_title": "446. British TV_ Top Gear", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.558255Z", + "index": 2017050501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 445, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/05/01/445-british-podcast-award-hello-to-new-listeners-17-vocabulary-expressions/", + "post_title": "445. British Podcast Award _ Hello to New Listeners _ 17 Vocabulary Expressions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.555258Z", + "index": 2017050101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 444, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/04/25/444-the-rick-thompson-report-snap-general-election-2017/", + "post_title": "444. The Rick Thompson Report_ Snap General Election 2017", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.552257Z", + "index": 2017042501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 443, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/04/21/443-the-trip-to-japan-part-2/", + "post_title": "443. The Trip to Japan (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.550258Z", + "index": 2017042102, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 442, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/04/21/442-the-trip-to-japan-part-1/", + "post_title": "442. The Trip to Japan (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.548258Z", + "index": 2017042101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 441, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/04/18/441-andy-johnson-at-the-iatefl-conference/", + "post_title": "441. Andy Johnson at the IATEFL Conference", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.546259Z", + "index": 2017041801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 440, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/04/06/440-this-pile-of-books-on-my-desk/", + "post_title": "440. This Pile of Books on my Desk", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.544260Z", + "index": 2017040602, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 439, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/04/06/439-reading-books-to-learn-english/", + "post_title": "439. Reading Books to Learn English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.541260Z", + "index": 2017040601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 438, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/04/04/438-hi-luke-i-have-a-question/", + "post_title": "438. Hi Luke, I have a question!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.539261Z", + "index": 2017040401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 437, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/31/437-ramble-news-31-march-2017/", + "post_title": "437. Ramble News \u2013 31 March 2017", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.536262Z", + "index": 2017033101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 436, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/28/436-the-return-of-the-lying-game-with-amber-paul-video/", + "post_title": "436. The Return of The Lying Game (with Amber & Paul) [Video]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.534264Z", + "index": 2017032801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/26/i-was-interviewed-on-my-fluent-podcast-with-daniel-goodson/", + "post_title": "I was interviewed on \u201cMy Fluent Podcast\u201d by Daniel Goodson", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.532263Z", + "index": 2017032601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 435, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/24/435-catching-up-with-amber-paul-5-video/", + "post_title": "435. Catching Up With Amber & Paul #5 [Video]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.529258Z", + "index": 2017032401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 434, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/21/434-interview-with-paul-taylor-wtf-france-video/", + "post_title": "434. Interview with Paul Taylor \u2013 \u201cWTF France_\u201d [Video]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.527259Z", + "index": 2017032101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 433, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/16/433-british-tv-gordon-ramsays-kitchen-nightmares-part-2-video/", + "post_title": "433. British TV_ Gordon Ramsay\u2019s Kitchen Nightmares (Part 2) [Video]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.525260Z", + "index": 2017031601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 432, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/14/432-british-tv-gordon-ramsays-kitchen-nightmares-part-1-video/", + "post_title": "432. British TV_ Gordon Ramsay\u2019s Kitchen Nightmares (Part 1) [Video]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.522261Z", + "index": 2017031401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 431, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/09/431-restaurants-hotels-really-strange-tripadvisor-reviews-with-amber/", + "post_title": "431. Restaurants & Hotels _ Really Strange TripAdvisor Reviews (with Amber)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.471278Z", + "index": 2017030901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 430, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/05/430-discussing-language-learning-life-with-fred-eyangoh/", + "post_title": "430. Discussing Language Learning & Life with Fred Eyangoh", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.468279Z", + "index": 2017030501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 429, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/03/01/429-ramblenews/", + "post_title": "429. RAMBLENEWS!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.466279Z", + "index": 2017030101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 428, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/02/23/428-british-comedy-limmys-show-part-2/", + "post_title": "428. British Comedy_ Limmy\u2019s Show (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.464280Z", + "index": 2017022301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 427, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/02/22/427-british-comedy-limmys-show/", + "post_title": "427. British Comedy_ Limmy\u2019s Show", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.461281Z", + "index": 2017022201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 426, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/02/16/426-thompson-taylor-minogue-victorian-detectives-part-2-with-amber-paul/", + "post_title": "426. Thompson, Taylor & Minogue_ Victorian Detectives (Part 2) with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.459289Z", + "index": 2017021601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 425, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/02/13/425/", + "post_title": "425. Thompson, Taylor & Minogue_ Victorian Detectives (Part 1) with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.457291Z", + "index": 2017021301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 424, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/02/08/424-with-andy-ben-from-the-london-school-of-english-part-2/", + "post_title": "424. With Andy & Ben from The London School of English (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.454284Z", + "index": 2017020801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 423, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/02/06/423-teacher-talking-time-with-andy-ben-from-the-london-school-of-english-part-1/", + "post_title": "423. With Andy & Ben from The London School of English (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.451284Z", + "index": 2017020601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 422, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/02/02/422-learning-british-dialects-with-korean-billy/", + "post_title": "422. Learning British Dialects with Korean Billy", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.449285Z", + "index": 2017020201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 421, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/29/421-skateboarding-a-new-olympic-sport-with-james/", + "post_title": "421. Skateboarding \u2013 A New Olympic Sport (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.447286Z", + "index": 2017012901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 420, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/26/420-anyone-fancy-a-brew-lets-have-a-nice-cup-of-tea/", + "post_title": "420. Anyone fancy a brew_ Let\u2019s have a nice cup of tea!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.444287Z", + "index": 2017012601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 419, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/23/419-rogue-one-a-star-wars-story-spoiler-ramble-with-james/", + "post_title": "419. Rogue One_ A Star Wars Story \u2013 SPOILER RAMBLE with James", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.442288Z", + "index": 2017012301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 418, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/19/418-the-rick-thompson-report-technology-and-the-future-january-2017/", + "post_title": "418. The Rick Thompson Report_ Technology and The Future (January 2017)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.439289Z", + "index": 2017011901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 417, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/15/417-new-years-resolutions-and-language-learning-in-2017/", + "post_title": "417. New Year\u2019s Resolutions and Language Learning in 2017", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.436295Z", + "index": 2017011501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 416, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/13/416-what-was-the-most-popular-episode-of-lep-in-2016-more-podcast-statistics/", + "post_title": "416. What was the most popular episode of LEP in 2016_ + more podcast statistics", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.433290Z", + "index": 2017011301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 415, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/10/415-with-the-family-part-3-more-encounters-with-famous-people/", + "post_title": "415. With the Family (Part 3) More Encounters with Famous People", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.431299Z", + "index": 2017011001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 414, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/05/414-with-the-family-part-2-my-uncle-met-a-rock-star/", + "post_title": "414. With the Family (Part 2) My Uncle Met a Rock Star", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.429297Z", + "index": 2017010501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 413, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2017/01/03/413-with-the-family-part-1-mums-cooking-vocabulary-with-uncle-nic/", + "post_title": "413. With The Family (Part 1) Mum\u2019s Cooking + Vocabulary (with Uncle Nic)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.426298Z", + "index": 2017010301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 412, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/12/26/412-british-festivals-and-holidays-part-2/", + "post_title": "412. British Festivals and Holidays (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.424298Z", + "index": 2016122602, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 411, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/12/26/411-british-festivals-and-holidays-part-1/", + "post_title": "411. British Festivals and Holidays (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.421294Z", + "index": 2016122601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/12/22/a-quick-message-about-donations-please-consider-donating-to-doctors-without-borders-to-help-people-in-need/", + "post_title": "A Quick Message About Donations \u2013 Please consider donating to \u201cDoctors Without Borders\u201d to help people in need", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.418295Z", + "index": 2016122201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 410, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/12/20/410-teaching-12-idioms-in-the-street-on-the-set-of-pauls-tv-show-with-amber/", + "post_title": "410. Teaching 12 Idioms in the Street _ On the Set of Paul\u2019s TV Show (with Amber)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.415302Z", + "index": 2016122001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 409, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/12/16/409-a-christmas-mega-ramble-with-amber-minogue/", + "post_title": "409. A CHRISTMAS MEGA-RAMBLE with AMBER MINOGUE", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.413301Z", + "index": 2016121601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 408, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/12/13/408-catching-up-with-amber-paul-4-videos/", + "post_title": "408. Catching Up With Amber & Paul #4 (+ videos)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.411303Z", + "index": 2016121301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 407, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/12/07/407-reflections-on-language-learning-working-as-a-translator-interview-with-kristina-from-russia-winner-of-the-lep-anecdote-competition-2016/", + "post_title": "407. Reflections on Language Learning & Working as a Translator_ Interview with Kristina from Russia, Winner of the LEP Anecdote Competition 2016", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.409303Z", + "index": 2016120701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 406, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/12/04/406-grammar-past-continuous-tense-uk-media-bias-brazil-football-tragedy/", + "post_title": "406. Grammar (Past Continuous Tense) _ UK Media Bias _ Brazil Football Tragedy", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.406304Z", + "index": 2016120401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 405, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/30/405-british-accents-in-the-lord-of-the-rings-part-2/", + "post_title": "405. British Accents in The Lord of the Rings (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.404300Z", + "index": 2016113002, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 404, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/30/404-british-accents-in-the-lord-of-the-rings-part-1/", + "post_title": "404. British Accents in The Lord of the Rings (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.401301Z", + "index": 2016113001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 403, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/29/403-competition-results-war-story-grammar-my-dads-accent/", + "post_title": "403. Competition Results _ War Story _ Grammar & Punctuation _ My Dad\u2019s Accent", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.398308Z", + "index": 2016112901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 402, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/23/402-the-rick-thompson-report-whats-going-on-nov-2016-post-truth-politics-cricket-and-tetris/", + "post_title": "402. The Rick Thompson Report_ What\u2019s Going On_ Nov. 2016 (Post-Truth Politics, Cricket and Tetris)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.396307Z", + "index": 2016112301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 401, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/21/401-switch-off-your-editor-to-improve-your-fluency-in-english/", + "post_title": "401. \u2018Switch off your editor\u2019 to improve your fluency in English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.394308Z", + "index": 2016112101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 400, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/18/400-the-pink-gorilla-story-2/", + "post_title": "400. The Pink Gorilla Story 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.392310Z", + "index": 2016111801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 399, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/15/399-the-return-of-molly-martinez-with-dane-nightingale/", + "post_title": "399. The Return of Molly Martinez (with Dane Nightingale)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.390309Z", + "index": 2016111501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 398, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/09/398-us-election-result-ramble-message-song/", + "post_title": "398. US Election Result Ramble + Message + Song", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.387306Z", + "index": 2016110901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 397, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/11/07/397-an-80-minute-ramble/", + "post_title": "397. An 80-Minute Ramble", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.384311Z", + "index": 2016110701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 396, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/28/396-the-lep-anecdote-competition-round-2/", + "post_title": "396. The LEP Anecdote Competition \u2013 ROUND 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.382313Z", + "index": 2016102801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 395, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/27/395-have-you-ever-with-paul-taylor-and-robert-hoehn/", + "post_title": "395. \u201cHave you ever\u2026_\u201d with Paul Taylor and Robert Hoehn", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.380312Z", + "index": 2016102701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 394, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/23/394-opp-other-peoples-podcasts-part-4/", + "post_title": "394. OPP_ Other People\u2019s Podcasts (Part 4)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.378313Z", + "index": 2016102301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 393, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/22/393-opp-other-peoples-podcasts-part-3/", + "post_title": "393. OPP_ Other People\u2019s Podcasts (Part 3)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.376314Z", + "index": 2016102201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 392, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/19/392-what-are-the-most-essential-skills-of-a-good-foreign-language-learner/", + "post_title": "392. What are the most essential skills of a good foreign language learner_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.373314Z", + "index": 2016101901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 391, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/17/391-discussing-language-culture-comedy-with-alexander-van-walsum/", + "post_title": "391. Discussing Language, Culture & Comedy with Alexander van Walsum", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.371311Z", + "index": 2016101701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 390, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/14/390-the-rick-thompson-report-hard-brexit-u-s-election/", + "post_title": "390. The Rick Thompson Report_ Hard Brexit _ U.S. Election", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.368316Z", + "index": 2016101401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 389, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/11/389-us-presidential-election-2016-trump-vs-clinton-with-sarah-sebastian-part-2/", + "post_title": "389. US Presidential Election 2016 \u2013 Trump vs Clinton (with Sarah & Sebastian) Part 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.366318Z", + "index": 2016101102, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 388, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/11/388-us-presidential-election-2016-trump-vs-clinton-with-sarah-and-sebastian/", + "post_title": "388. US Presidential Election 2016 \u2013 Trump vs Clinton (with Sarah & Sebastian) Part 1", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.364317Z", + "index": 2016101101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 387, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/07/387-lep-anecdote-competition-entries-please-listen-vote/", + "post_title": "387. LEP Anecdote Competition Entries \u2013 Please listen & vote", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.361318Z", + "index": 2016100701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 386, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/05/386-breaking-the-intermediate-plateau-part-2/", + "post_title": "386. Breaking the Intermediate Plateau (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.359320Z", + "index": 2016100502, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 385, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/10/05/385-breaking-the-intermediate-plateau-part-1/", + "post_title": "385. Breaking the Intermediate Plateau (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.357320Z", + "index": 2016100501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 384, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/30/384-teaching-grammar-social-english/", + "post_title": "384. Teaching Grammar & Social English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.355320Z", + "index": 2016093001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 383, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/27/383-more-ian-moore/", + "post_title": "383. More Ian Moore", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.352321Z", + "index": 2016092701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/23/please-take-my-survey-anecdote-competition-russian-joke-video/", + "post_title": "Please take my survey _ Anecdote Competition _ \u2018Russian Joke\u2019 Video", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.350322Z", + "index": 2016092301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 382, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/21/382-mod-culture-with-ian-moore/", + "post_title": "382. Mod Culture with Ian Moore", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.347323Z", + "index": 2016092101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 381, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/17/381-discussing-cultural-differences-with-amber-paul/", + "post_title": "381. Discussing Cultural Differences with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.345323Z", + "index": 2016091701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 380, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/12/380-catching-up-with-amber-and-paul-3/", + "post_title": "380. Catching Up with Amber and Paul #3", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.343324Z", + "index": 2016091201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 379, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/07/379-the-lep-anecdote-competition/", + "post_title": "379. The LEP Anecdote Competition", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.341326Z", + "index": 2016090701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 378, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/05/378-holiday-in-thailand-part-2/", + "post_title": "378. Holiday in Thailand (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.338328Z", + "index": 2016090501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 377, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/09/03/377-holiday-in-thailand/", + "post_title": "377. Holiday in Thailand (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.336328Z", + "index": 2016090301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/12/im-going-on-holiday-no-podcasts-for-a-while/", + "post_title": "I\u2019m going on holiday \u2013 no podcasts for a while", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.333327Z", + "index": 2016081204, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 376, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/12/376-a-game-of-mini-golf-and-a-pint-with-james/", + "post_title": "376. A Game of Mini Golf and a Pint (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.331329Z", + "index": 2016081203, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 375, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/12/375-the-lep-pub-quiz-with-alex-love/", + "post_title": "375. The LEP Pub Quiz (with Alex Love)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.329329Z", + "index": 2016081202, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 374, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/12/374-alexs-edinburgh-report/", + "post_title": "374. Alex\u2019s Edinburgh Fringe Report", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.327329Z", + "index": 2016081201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 373, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/10/373-who-wants-to-be-good-at-english/", + "post_title": "373. Who Wants to Be Good at English_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.325331Z", + "index": 2016081001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 372, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/09/372-the-importance-of-anecdotes-in-english-narrative-tenses-four-anecdotes", + "post_title": "372. The Importance of Anecdotes in English _ Narrative Tenses _ Four Anecdotes", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.322332Z", + "index": 2016080901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 371, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/07/371-in-conversation-with-rob-ager-from-liverpool-part-2-film-analysis-hidden-meanings-stanley-kubrick-conspiracy-theory/", + "post_title": "371. In Conversation with Rob Ager from Liverpool (PART 2_ Film Analysis _ Hidden Meanings _ Stanley Kubrick _ Conspiracy Theory)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.319333Z", + "index": 2016080702, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 369, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/03/389-pokemon-go-its-just-a-game-or-is-it/", + "post_title": "369. Pok\u00e9mon GO \u2013 It\u2019s just a game, OR IS IT_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.261351Z", + "index": 2016080301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 368, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/08/02/368-the-lep-annual-general-meeting-2016-questions/", + "post_title": "368. The LEP Annual General Meeting 2016 _ QUESTIONS", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.259352Z", + "index": 2016080201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 367, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/07/31/367-talking-about-nothing-with-alex-love-invaded-by-robot-aliens-part-2/", + "post_title": "367. Talking about Nothing with Alex Love (Invaded by Robot Aliens) PART 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.257352Z", + "index": 2016073102, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 366, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/07/31/366-talking-about-nothing-with-alex-love-invaded-by-robot-aliens/", + "post_title": "366. Talking about Nothing with Alex Love (Invaded by Robot Aliens)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.254350Z", + "index": 2016073101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/07/27/quick-hello-notting-hill-carnival-audio/", + "post_title": "Quick Hello _ Notting Hill Carnival Audio", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.251350Z", + "index": 2016072701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 365, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/07/17/365-brexit-3-weeks-later-a-conversation-with-my-dad/", + "post_title": "365. BREXIT_ 3 Weeks Later (A conversation with my Dad)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.249351Z", + "index": 2016071701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 364, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/07/15/364-ten-top-tips-for-learning-english/", + "post_title": "364. TEN TOP TIPS for Learning English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.247351Z", + "index": 2016071501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 363, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/07/03/363-muhammad-ali-the-rumble-in-the-jungle/", + "post_title": "363. Muhammad Ali & The Rumble in the Jungle", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.245352Z", + "index": 2016070301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 362, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/28/362-getting-things-off-my-chest-part-2/", + "post_title": "362. Getting things off my chest! (Part 2) Brexit _ Football", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.242358Z", + "index": 2016062802, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 361, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/28/361-getting-things-off-my-chest-part-1/", + "post_title": "361. Getting things off my chest! (Part 1) Brexit _ Football", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.240359Z", + "index": 2016062801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 360, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/24/360-the-day-after-brexit-thoughts-and-feelings/", + "post_title": "360. THE DAY AFTER BREXIT (Thoughts and feelings)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.237356Z", + "index": 2016062402, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 359, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/24/359-brexit-jokes-eu-referendum-night/", + "post_title": "359. BREXIT JOKES _ EU REFERENDUM NIGHT", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.234362Z", + "index": 2016062401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 358, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/23/358-fete-de-la-musique-world-music-festival-in-paris/", + "post_title": "358. F\u00eate de la Musique _ World Music Festival in Paris", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.232362Z", + "index": 2016062301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 357, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/19/357-olly-richards/", + "post_title": "357. Learning Languages with Olly Richards", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.230362Z", + "index": 2016061901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 356, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/17/356-lep-meeting-football-brexit-events-in-the-uk-jo-cox/", + "post_title": "356. News _ Football _ Brexit _ Events in the UK _ Jo Cox", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.227362Z", + "index": 2016061701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 355, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/13/355-euro-2016-football-hooliganism-violence-in-marseille-england-vs-russia/", + "post_title": "355. EURO 2016 Football_ Hooliganism & Violence in Marseille _ England vs Russia", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.225363Z", + "index": 2016061301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 354, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/10/354-would-you-rather-with-amber-paul-james-simpson/", + "post_title": "354. Would You Rather\u2026_ (with Amber, Paul & James Simpson)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.223364Z", + "index": 2016061001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 353, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/07/353-award-ceremony-paris-weather-crazy-idea/", + "post_title": "353. Award Ceremony _ Paris Weather _ Crazy Idea", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.220361Z", + "index": 2016060702, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 352, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/06/07/352-brexit-key-vocabulary-and-concepts/", + "post_title": "352. BREXIT_ Key Vocabulary and Concepts", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.218365Z", + "index": 2016060701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 351, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/05/29/351-brexit-should-the-uk-leave-the-eu-a-conversation-with-my-dad/?w3tc_note=flush_all", + "post_title": "351. BREXIT_ Should the UK leave the EU_ (A Conversation with my Dad)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.215367Z", + "index": 2016052901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 350, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/05/26/350-x-men-apocalypse-film-review/", + "post_title": "350. Film Club_ X-Men Apocalypse (Review)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.213367Z", + "index": 2016052601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 349, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/05/24/349-whos-the-best-superhero-with-paul-langton/", + "post_title": "349. Who\u2019s the best superhero_ (with Paul Langton)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.211368Z", + "index": 2016052401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 348, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/05/19/348-marvel-superhero-movies-captain-america-civil-war-part-2/", + "post_title": "348. Film Club_ Marvel _ Captain America Civil War (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.208370Z", + "index": 2016051902, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 347, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/05/19/347-marvel-superhero-movies-captain-america-civil-war-part-1/", + "post_title": "347. Film Club_ Marvel _ Captain America Civil War (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.206369Z", + "index": 2016051901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 346, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/05/13/346-rambling-on-a-friday-afternoon/", + "post_title": "346. Rambling on a Friday Afternoon", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.204366Z", + "index": 2016051301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 345, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/05/11/345-elton-award-nomination-phrasal-verbs-idioms-brooklyn-the-revenant-museum-of-natural-history-more/", + "post_title": "345. ELTon Award Nomination _ Phrasal Verbs & Idioms _ Brooklyn _ The Revenant _ Museum of Natural History & More", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.201371Z", + "index": 2016051101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 344, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/04/22/344-a-totally-terrific-talk-on-the-terrace-with-the-tangential-trio-feat-tom-morton/", + "post_title": "344. A Totally Terrific Talk on the Terrace with The Tangential Trio (feat. Tom Morton) with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.199372Z", + "index": 2016042201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 343, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/04/20/the-interactive-lying-game/", + "post_title": "343. The Interactive Lying Game (with Amber & Paul) _ Descriptive Adjectives with T _ Three is a Magic Number", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.196374Z", + "index": 2016042001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 342, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/04/18/342-pauls-la-bise-video-success-audition-story-with-amber-paul/", + "post_title": "342. Paul\u2019s \u201cLa Bise\u201d Video Success _ Audition Story (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.194374Z", + "index": 2016041801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 341, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/04/15/341-catching-up-with-amber-paul-again/", + "post_title": "341. Catching Up With Amber & Paul, Again", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.192374Z", + "index": 2016041501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 340, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/04/07/340-lep-photo-competition-results-winners-its-leps-7th-birthday/", + "post_title": "340. LEP Photo Competition Results & Winners _ It\u2019s LEP\u2019s 7th Birthday", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.190375Z", + "index": 2016040701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 339, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/04/03/339-a-murder-mystery-detective-story-part-2/", + "post_title": "339. A Murder Mystery Detective Story (Part 2 of 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.187371Z", + "index": 2016040301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 338, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/31/338-a-murder-mystery-detective-story/", + "post_title": "338. A Murder Mystery Detective Story (Part 1 of 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.184377Z", + "index": 2016033101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/24/i-was-interviewed-by-olly-richards-on-his-podcast-called-i-will-teach-you-a-language-and-we-talked-about-language-learning/", + "post_title": "I was interviewed by Olly Richards on his podcast, called \u201cI Will Teach You a Language\u201d and we talked about language learning", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.182378Z", + "index": 2016032401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 337, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/23/337-murder-mile-walks-stories-of-londons-most-infamous-shocking-murders-some-explicit-content-swearing/", + "post_title": "337. MURDER MILE WALKS_ Stories of London\u2019s Most Infamous & Shocking Murders [Some Explicit Content + Swearing]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.180377Z", + "index": 2016032301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/20/i-was-invited-onto-craig-wealands-weekly-blab-and-we-talked-about-comedy-video/", + "post_title": "I was invited onto Craig Wealand\u2019s weekly Blab, and we talked about comedy", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.178378Z", + "index": 2016032001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 336, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/16/336-drinking-scottish-whisky-at-a-german-business-meeting-while-wearing-a-kilt-and-playing-a-flute-and-other-stories-with-carrick-cameron/", + "post_title": "336. Drinking Scottish Whisky at a German Business Meeting While Wearing a Kilt and Playing a Flute\u2026 and other stories (with Carrick Cameron)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.176380Z", + "index": 2016031601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 335, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/13/335-vocabulary-review-phrases-expressions-from-episode-334/", + "post_title": "335. VOCABULARY REVIEW_ Phrases & Expressions from Episode 334.", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.173380Z", + "index": 2016031301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 334, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/09/334-interview-with-craig-wealand-from-inglespodcast/", + "post_title": "334. Interview with Craig Wealand (from InglesPodcast)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.171378Z", + "index": 2016030901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/04/my-interview-with-school-kids-from-ies-school-in-san-fernando-spain/", + "post_title": "My interview with school kids from IES School in San Fernando, Spain", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.168376Z", + "index": 2016030401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 333, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/03/01/333-more-misheard-lyrics-\u266c/", + "post_title": "333. More Misheard Lyrics \u266c", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.165378Z", + "index": 2016030101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 332, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/02/26/332-olly-richards-english-polyglot-top-advice-and-strategies-for-language-learning/", + "post_title": "332. Olly Richards_ English Polyglot \u2013 Top Advice and Strategies for Language Learning", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.163378Z", + "index": 2016022601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 331, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/02/22/331-hows-your-english-and-why-speaking-is-so-important/", + "post_title": "331. How\u2019s your English_ (and why speaking is so important)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.161379Z", + "index": 2016022201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 330, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/02/17/330-lets-play-grand-theft-auto-5-and-learn-some-english-while-doing-it/", + "post_title": "330. Let\u2019s Play\u2026 Grand Theft Auto 5 (and learn some English while doing it)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.159379Z", + "index": 2016021701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 329, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/02/14/329-a-rambling-chat-with-james-news-stories-jokes/", + "post_title": "329. A Rambling Chat with James (News, Stories, Jokes)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.157380Z", + "index": 2016021401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 328, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/02/03/328-cooking-with-luke-verbs-and-expressions-in-the-kitchen/", + "post_title": "328. Cooking with Luke \u2013 Verbs and Expressions in the Kitchen", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.154382Z", + "index": 2016020301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 327, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/01/20/327-the-lep-photo-competition-please-check-out-the-photos-and-vote/", + "post_title": "327. The LEP Photo Competition \u2013 Please check out the photos and vote", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.151383Z", + "index": 2016012002, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 326, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/01/20/326-catching-up-with-oli-future-predictions/", + "post_title": "326. Catching up with Oli _ Future Predictions (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.149383Z", + "index": 2016012001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 325, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/01/18/325-catching-up-with-oli-future-predictions/", + "post_title": "325. Catching Up with Oli _ Future Predictions (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.147383Z", + "index": 2016011801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 324, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/01/14/324-david-bowie-part-2/", + "post_title": "324. David Bowie (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.145384Z", + "index": 2016011402, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 323, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/01/14/323-david-bowie-part-1/", + "post_title": "323. David Bowie (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.142385Z", + "index": 2016011401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 322, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/01/07/322-with-the-thompsons/", + "post_title": "322. With The Thompsons", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.140386Z", + "index": 2016010701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 321, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2016/01/04/321-star-wars-episode-vii-the-force-awakens-spoiler-review/", + "post_title": "321. Star Wars Episode VII_ The Force Awakens \u2013 SPOILER REVIEW", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.138388Z", + "index": 2016010401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 320, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/12/23/320-a-christmas-carol-by-charles-dickens/", + "post_title": "320. A Christmas Carol by Charles Dickens", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.135388Z", + "index": 2015122301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 319, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/12/16/319-star-wars-vii-the-force-awakens-reaction-no-spoilers/", + "post_title": "319. Star Wars VII_ The Force Awakens \u2013 Reaction (No spoilers!)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.133388Z", + "index": 2015121602, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 318, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/12/16/318-the-rematch-part-2/", + "post_title": "318. The Rematch (Part 2) with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.130389Z", + "index": 2015121601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 317, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/12/11/the-rematch/", + "post_title": "317. The Rematch (Part 1) With Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.128390Z", + "index": 2015121101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 316, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/12/07/316-british-comedy-tim-vine-part-2/", + "post_title": "316. British Comedy_ Tim Vine (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.126390Z", + "index": 2015120701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 315, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/12/03/315-do-me-a-favour-take-my-business-english-survey/", + "post_title": "315. Do me a favour \u2013 Take my Business English Survey!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.124391Z", + "index": 2015120301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 314, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/12/01/lukes-guided-sleep-meditation/", + "post_title": "314. Luke\u2019s Guided Sleep Meditation", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.121393Z", + "index": 2015120101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 313, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/11/27/313-british-comedy-tim-vine/", + "post_title": "313. British Comedy_ Tim Vine", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.118398Z", + "index": 2015112701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 312, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/11/25/312-the-words-of-the-year-part-3/", + "post_title": "312. The Words of the Year (Part 3) with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.116398Z", + "index": 2015112501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 311, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/11/18/311-the-words-of-the-year-2015-part-2/", + "post_title": "311. The Words of the Year (Part 2) with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.114399Z", + "index": 2015111802, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 310, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/11/18/310-the-words-of-the-year-part-1/", + "post_title": "310. The Words of the Year (Part 1) with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.111400Z", + "index": 2015111801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/11/16/attacks-in-paris-13-november-2015-eyewitness-report/", + "post_title": "Attacks in Paris (with Paul Taylor)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.109401Z", + "index": 2015111601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 309, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/11/11/309-the-lying-game-part-2/", + "post_title": "309. The Lying Game (Part 2) With Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.107401Z", + "index": 2015111101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 308, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/11/07/308-the-lying-game-part-1/", + "post_title": "308. The Lying Game (Part 1) With Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.105402Z", + "index": 2015110701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 307, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/11/04/307-the-mystery-of-corporate-jargon-management-speak-part-2/", + "post_title": "307. The Mystery of Corporate Jargon & Management Speak (Part 2) with Paul Taylor", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.101399Z", + "index": 2015110401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 306, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/10/28/306-corporate-jargon-management-speak-part-1/", + "post_title": "306. The Mystery of Corporate Jargon & Management Speak (Part 1) with Paul Taylor", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:30.099400Z", + "index": 2015102801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 303, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/10/19/303-the-battle-of-britain/", + "post_title": "303. The Battle of Britain", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.942455Z", + "index": 2015101901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 302, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/10/14/302-bad-dentist-star-wars-adam-buxton-headphone-jams-jarvis-cocker/", + "post_title": "302. Bad Dentist _ Star Wars _ Adam Buxton _ Headphone Jams _ Jarvis Cocker", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.939453Z", + "index": 2015101401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 301, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/10/11/301-david-cameron-the-pig-bad-gig-story-who-is-ronnie-pickering/", + "post_title": "301. David Cameron & The Pig _ Bad Gig Story _ Who is Ronnie Pickering_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.936457Z", + "index": 2015101101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 300, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/10/07/300-episode-300-part-2/", + "post_title": "300. EPISODE 300 (PART 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.934453Z", + "index": 2015100702, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 300, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/10/07/300-episode-300-part-1/", + "post_title": "300. EPISODE 300 (PART 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.931459Z", + "index": 2015100701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 299, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/09/30/299-the-bank-robbery-part-2/", + "post_title": "299. The Bank Robbery (Part 2) (with Amber, Paul and Sebastian)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.929460Z", + "index": 2015093001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 298, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/09/24/298-the-bank-robbery-part-1/", + "post_title": "298. The Bank Robbery (Part 1) (with Amber, Paul & Sebastian)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.927461Z", + "index": 2015092401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 297, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/09/18/using-humour-in-the-ielts-speaking-test-with-jessica-from-all-ears-english/", + "post_title": "297. Using Humour in the IELTS Speaking Test (With Jessica from All Ears English)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.925461Z", + "index": 2015091801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 296, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/09/11/296-learning-comedy-is-like-learning-a-language/", + "post_title": "296. Learning Comedy is like Learning a Language (with Paul Taylor)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.923463Z", + "index": 2015091101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 295, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/09/07/295-california-road-trip-final-part/", + "post_title": "295. California Road Trip (Final Part)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.920459Z", + "index": 2015090701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 294, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/09/02/294-california-road-trip-part-7/", + "post_title": "294. California Road Trip (Part 7)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.917464Z", + "index": 2015090201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 293, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/09/01/293-california-road-trip-part-6/", + "post_title": "293. California Road Trip (Part 6)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.915464Z", + "index": 2015090101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 292, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/08/31/292-california-road-trip-part-5/", + "post_title": "292. California Road Trip (Part 5)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.912465Z", + "index": 2015083101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 291, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/08/28/291-california-road-trip-part-4/", + "post_title": "291. California Road Trip (Part 4)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.910466Z", + "index": 2015082801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 290, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/08/27/290-california-road-trip-part-3/", + "post_title": "290. California Road Trip (Part 3)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.908467Z", + "index": 2015082701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 289, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/08/26/289-california-road-trip-part-2/", + "post_title": "289. California Road Trip (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.906467Z", + "index": 2015082602, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 288, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/08/26/288-california-road-trip-part-1/", + "post_title": "288. California Road Trip (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.903464Z", + "index": 2015082601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 287, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/08/04/287-vocab-battle-with-amber-paul-exciting-title/", + "post_title": "287. VOCAB BATTLE!!! WITH AMBER & PAUL (exciting title)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.901464Z", + "index": 2015080402, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 286, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/08/04/286-the-wedding-episode/", + "post_title": "286. The Wedding Episode", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.898465Z", + "index": 2015080401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 285, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/08/03/285/", + "post_title": "285. Ten More Fixed Expressions (with Paul Taylor)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.896465Z", + "index": 2015080301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/07/22/an-experimental-live-video-podcast-on-periscope/", + "post_title": "An Experimental Live Video Podcast on Periscope", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.894466Z", + "index": 2015072201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 284, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/07/08/284-questions-from-tea4er-ru-part-2/", + "post_title": "284. Questions from Tea4er.ru (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.892467Z", + "index": 2015070801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 283, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/07/02/283-ten-fixed-expressions/", + "post_title": "283. Ten Fixed Expressions (with Paul Taylor)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.889468Z", + "index": 2015070201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 282, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/06/29/282-questions-from-tea4er-ru/", + "post_title": "282. Questions from Tea4er.ru", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.886469Z", + "index": 2015062901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 281, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/06/17/281-misheard-lyrics/", + "post_title": "281. Misheard Lyrics", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.884470Z", + "index": 2015061701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 280, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/06/14/280-uk-superstitions/", + "post_title": "280. The UK\u2019s Favourite Superstitions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.881470Z", + "index": 2015061401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 279, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/06/10/279-marcus-keeley-northern-ireland-accent-part-3/", + "post_title": "279. Marcus Keeley _ Northern Ireland _ Accent (Part 3)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.879471Z", + "index": 2015061001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 278, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/06/09/278-marcus-keeley-northern-ireland-part-2/", + "post_title": "278. Marcus Keeley _ Northern Ireland (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.877472Z", + "index": 2015060902, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 277, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/06/09/277-a-chat-with-marcus-keeley-from-northern-ireland/", + "post_title": "277. A Chat with Marcus Keeley from Northern Ireland (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.875472Z", + "index": 2015060901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/06/03/survey-what-kind-of-episodes-of-lep-do-you-prefer/", + "post_title": "Survey_ What kind of episodes of LEP do you prefer_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.873473Z", + "index": 2015060301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 276, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/06/02/276-qa-session-5/", + "post_title": "276. Q&A Session #5", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.870475Z", + "index": 2015060201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 275, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/29/275-the-phrasal-verb-chronicles-2/", + "post_title": "275. The Phrasal Verb Chronicles #2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.867475Z", + "index": 2015052901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 274, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/26/274-qa-session-4/", + "post_title": "274. Q&A Session #4", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.865476Z", + "index": 2015052601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 273, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/24/273-the-bad-haircut-situation-part-2-more-role-plays-improvisations/", + "post_title": "273. The Bad Haircut Situation Part 2_ More Role Plays & Improvisations (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.863476Z", + "index": 2015052401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 272, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/21/272-the-bad-haircut-situation/", + "post_title": "272. The Bad Haircut Situation (with Amber & Paul)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.861477Z", + "index": 2015052101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 271, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/17/catching-up-with-amber-and-paul/", + "post_title": "271. Catching Up with Amber & Paul", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.858478Z", + "index": 2015051701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 270, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/15/270-uk-general-election-results/", + "post_title": "270. UK General Election RESULTS", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.856479Z", + "index": 2015051501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 269, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/05/269-uk-general-election-2015-part-2/", + "post_title": "269. UK General Election 2015 (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.854481Z", + "index": 2015050501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 268, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/03/268-uk-general-election-2015-part-1/", + "post_title": "268. UK General Election 2015 (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.851481Z", + "index": 2015050301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 267, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/02/267-earthquake-in-nepal-other-news/", + "post_title": "267. Earthquake in Nepal + other news", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.849481Z", + "index": 2015050201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/05/01/lukes-tv-appearance-on-france-24-tv/", + "post_title": "Luke\u2019s TV Appearance on France24", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.846482Z", + "index": 2015050101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 266, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/04/24/266-telling-jokes-in-english-part-3/", + "post_title": "266. Telling Jokes in English (Part 3)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.844483Z", + "index": 2015042401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 265, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/04/23/265-telling-jokes-in-english-part-2/", + "post_title": "265. Telling Jokes in English (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.842484Z", + "index": 2015042301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 264, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/04/20/jokes1/", + "post_title": "264. Telling Jokes in English (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.840484Z", + "index": 2015042001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 263, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/04/08/263-past-present-future/", + "post_title": "263. Past, Present & Future", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.836488Z", + "index": 2015040801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/03/31/lukes-interview-on-inglespodcast/", + "post_title": "Luke\u2019s Interview on InglesPodcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.833486Z", + "index": 2015033101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/03/17/a-message-from-luke/", + "post_title": "A Message from Luke", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.831487Z", + "index": 2015031701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 262, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/03/03/262-what-is-britishness-part-2/", + "post_title": "262. What is Britishness_ (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.829487Z", + "index": 2015030302, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 261, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/03/03/261-what-is-britishness-part-1/", + "post_title": "261. What is Britishness_ (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.827488Z", + "index": 2015030301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 260, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/02/26/kingsman/", + "post_title": "260. Kingsman_ The Secret Service", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.825488Z", + "index": 2015022601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 259, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/02/24/259-eulogy-for-dennis/", + "post_title": "259. Eulogy for Dennis", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.822495Z", + "index": 2015022401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 258, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/02/17/258-award-win-thank-you-poem/", + "post_title": "258. Award Win _ Thank You _ Poem", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.818491Z", + "index": 2015021701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 257, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/02/10/257-be-positive/", + "post_title": "257. Be Positive", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.816492Z", + "index": 2015021001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 256, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/02/01/reading-books-in-english/", + "post_title": "256. Reading Books in English (and listening to them too)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.814492Z", + "index": 2015020101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 255, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/26/255-taken-3-expressions-with-take/", + "post_title": "255. Taken 3 _ Expressions with \u2018Take\u2019", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.812493Z", + "index": 2015012601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 254, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/22/254-ielts-tips-tricks/", + "post_title": "254. IELTS Tips & Tricks", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.809494Z", + "index": 2015012201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 253, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/20/fluency-mc/", + "post_title": "253. Rapping with Fluency MC!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.807495Z", + "index": 2015012001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 252, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/16/marooned-with-my-music-james-thompson/", + "post_title": "252. Marooned With My Music_ James Thompson", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.805502Z", + "index": 2015011601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 251, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/13/251-welcome-to-lep-16-things-you-should-know-about-lep/", + "post_title": "251. Welcome to LEP _ 16 Things You Should Know about LEP", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.801501Z", + "index": 2015011301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 250, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/11/250-marooned-with-my-music-gill-thompson/", + "post_title": "250. Marooned With My Music_ Gill Thompson", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.799502Z", + "index": 2015011101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 249, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/08/249-news-lep-merchandise-messages/", + "post_title": "249. News _ LEP Merchandise _ Messages", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.797503Z", + "index": 2015010801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 248, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/06/248-marooned-with-my-music-rick-thompson/", + "post_title": "248. Marooned With My Music_ Rick Thompson", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.794504Z", + "index": 2015010601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 247, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2015/01/03/247-understanding-america/", + "post_title": "247. Understanding The USA", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.792505Z", + "index": 2015010301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 246, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/12/24/246-flight-stories/", + "post_title": "246. Flight Stories", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.790501Z", + "index": 2014122402, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/12/24/video-one-of-lukes-stand-up-comedy-gigs/", + "post_title": "_Video \u2013 One of Luke\u2019s Stand-up Comedy Gigs", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.788507Z", + "index": 2014122401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 245, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/12/23/245-merry-christmas-other-news/", + "post_title": "245. Merry Christmas! (+more) + Video", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.785507Z", + "index": 2014122301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 244, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/12/15/244-urban-myths/", + "post_title": "244. Urban Myths", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.782507Z", + "index": 2014121501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 243, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/12/11/243-a-life-changing-teaching-experience-in-ghana/", + "post_title": "243. A Life-Changing Teaching Experience in Ghana", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.780509Z", + "index": 2014121101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 242, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/12/07/242-11-idioms-only-brits-understand-really/", + "post_title": "242. 11 Idioms Only Brits Understand (really_)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.778510Z", + "index": 2014120701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 241, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/12/02/241-star-wars/", + "post_title": "241. Star Wars", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.776510Z", + "index": 2014120202, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 240, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/12/02/240-politicians-avoiding-questions/", + "post_title": "240. Politicians Avoiding Questions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.774510Z", + "index": 2014120201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 239, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/26/239-prepositions-verb-collocations/", + "post_title": "239. Prepositions_ Verb Collocations", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.771517Z", + "index": 2014112601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 238, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/24/238-prepositions-failed-attempt/", + "post_title": "238. Prepositions (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.768512Z", + "index": 2014112401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 237, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/18/237-opp-other-peoples-podcasts-part-2/", + "post_title": "237. OPP_ Other People\u2019s Podcasts (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.766514Z", + "index": 2014111802, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 236, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/18/236-opp-other-peoples-podcasts-part-1/", + "post_title": "236. OPP_ Other People\u2019s Podcasts (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.764515Z", + "index": 2014111801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/16/my-appearance-on-the-talk2learn-chatcast/", + "post_title": "_My Appearance on the Talk2Learn Chatcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.762515Z", + "index": 2014111601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 235, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/14/british-slang-n-to-z/", + "post_title": "235. British Slang (N to Z)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.759516Z", + "index": 2014111401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 234, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/11/234-making-choons-with-jim/", + "post_title": "234. Making \u201cChoons\u201d with My Brother", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.757516Z", + "index": 2014111101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 233, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/07/233-yep-winner-edgar-hernandez/", + "post_title": "233. YEP! Winner", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.755517Z", + "index": 2014110701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 232, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/06/232-yep-runners-up-part-2/", + "post_title": "232. YEP! Runners Up (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.752518Z", + "index": 2014110602, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 231, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/06/231-yep-runners-up-part-1/", + "post_title": "231. YEP! Runners Up (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.750518Z", + "index": 2014110601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 230, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/11/04/230-can-you-learn-a-language-in-6-months/", + "post_title": "230. Can You Learn a Language in 6 Months_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.748520Z", + "index": 2014110401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 229, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/30/229-zombies-part-2/", + "post_title": "229. Zombies! (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.745520Z", + "index": 2014103002, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 228, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/30/228-zombies/", + "post_title": "228. Zombies! (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.743521Z", + "index": 2014103001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 227, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/27/227-sausages-barcodes-apple-watches/", + "post_title": "227. Sausages, Barcodes & Apple Watches", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.740517Z", + "index": 2014102701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/25/my-video-interview-with-gabby-wallace/", + "post_title": "_My Video Interview with Gabby Wallace from \u201cGo Natural English\u201d", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.738518Z", + "index": 2014102501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 226, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/21/226-on-a-boat/", + "post_title": "226. On a Boat", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.735524Z", + "index": 2014102101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 225, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/16/film-club-taken/", + "post_title": "225. Film Club_ \u201cTaken\u201d", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.732524Z", + "index": 2014101601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 224, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/13/pronunciation-verb-tenses-connected-speech/", + "post_title": "224. Pronunciation_ Verb Tenses & Connected Speech", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.730525Z", + "index": 2014101301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/10/please-consider-donating-to-lepra-org-uk/", + "post_title": "_Please Consider Donating to Lepra.org.uk", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.728525Z", + "index": 2014101001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 223, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/10/07/223-yep-competition-winners/", + "post_title": "223. YEP! Competition Winners", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.725526Z", + "index": 2014100701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 222, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/30/222-lukes-late-night-podcast/", + "post_title": "222. Luke\u2019s Late Night Podcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.723527Z", + "index": 2014093001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/26/video-playing-around-with-accents-in-english/", + "post_title": "Video_ Playing Around with Accents in English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.720523Z", + "index": 2014092601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 221, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/23/221-a-cup-of-tea-with-corneliu-dragomirescu-part-2/", + "post_title": "221. A Cup of Tea with Corneliu Dragomirescu (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.718529Z", + "index": 2014092301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 220, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/17/220-a-cup-of-tea-with-corneliu-dragomirescu/", + "post_title": "220. A Cup of Tea with Corneliu Dragomirescu", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.715530Z", + "index": 2014091701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 219, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/10/scottish-independence/", + "post_title": "219. Scottish Independence", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.713531Z", + "index": 2014091001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 218, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/07/218-yep-competition-entries-8/", + "post_title": "218. YEP! Competition Entries #8", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.711528Z", + "index": 2014090708, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 217, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/07/217-yep-competition-entries-7/", + "post_title": "217. YEP! Competition Entries #7", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.708532Z", + "index": 2014090707, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 216, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/07/216-yep-competition-entries-6/", + "post_title": "216. YEP! Competition Entries #6", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.706534Z", + "index": 2014090706, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 215, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/07/215-yep-competition-entries-5/", + "post_title": "215. YEP! Competition Entries #5", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.704529Z", + "index": 2014090705, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 214, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/07/214-yep-competition-entries-4/", + "post_title": "214. YEP! Competition Entries #4", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.701536Z", + "index": 2014090704, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 213, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/07/213-yep-competition-entries-3/", + "post_title": "213. YEP! Competition Entries #3", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.699536Z", + "index": 2014090703, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 212, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/07/212-yep-competition-entries-2/", + "post_title": "212. YEP! Competition Entries #2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.697537Z", + "index": 2014090702, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 211, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/07/211-yep-competition-entries-1/", + "post_title": "211. YEP! Competition Entries #1", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.694538Z", + "index": 2014090701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 210, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/09/04/210-a-bit-of-a-chat-with-noman-hosni/", + "post_title": "210. A Cup of Tea with Noman Hosni", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.692539Z", + "index": 2014090401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 209, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/08/29/209-travelling-in-indonesia-part-2/", + "post_title": "209. Travelling in Indonesia (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.689534Z", + "index": 2014082902, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 208, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/08/29/208-travelling-in-indonesia-part-1/", + "post_title": "208. Travelling in Indonesia (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.687536Z", + "index": 2014082901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 207, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/08/08/competition-inspiration/", + "post_title": "207. Competition Inspiration", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.684541Z", + "index": 2014080801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 206, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/08/06/205-summer-in-london-part-2/", + "post_title": "206. Summer in London (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.682542Z", + "index": 2014080601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 205, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/08/05/205-summer-in-london-part-1/", + "post_title": "205. Summer in London (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.680543Z", + "index": 2014080502, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 204, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/08/05/204-quick-hello-competition-update-more-news/", + "post_title": "204. Quick Hello_ Competition Update & More News", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.678544Z", + "index": 2014080501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 203, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/08/04/203-the-flatmate-from-japan/", + "post_title": "203. The Flatmate from Japan", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.675538Z", + "index": 2014080401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 202, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/08/01/202-british-comedy-monty-python-the-holy-grail/", + "post_title": "202. British Comedy_ Monty Python & The Holy Grail", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.673545Z", + "index": 2014080101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/30/my-interview-on-zdeneks-english-podcast/", + "post_title": "My Interview on Zden\u011bk\u2019s English Podcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.670540Z", + "index": 2014073001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 201, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/28/201-nikolay-kulikov-a-russian-comedian-in-london/", + "post_title": "201. Nikolay Kulikov_ A Russian Comedian in London", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.666545Z", + "index": 2014072801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 200, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/25/200-new-competition-your-english-podcast/", + "post_title": "200. New Competition_ \u201cYour English Podcast\u201d", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.664542Z", + "index": 2014072501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 199, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/17/199-the-ukusa-quiz/", + "post_title": "199. The UK_USA Quiz", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.662542Z", + "index": 2014071702, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 198, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/17/198-a-cup-of-tea-with-molly-martinez/", + "post_title": "198. A Cup of Tea with Molly Martinez", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.659548Z", + "index": 2014071701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 197, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/15/197-world-cup-2014-part-6-final-comments/", + "post_title": "197. World Cup 2014 (Part 6_ Final Comments)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.657550Z", + "index": 2014071501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 196, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/07/196-cycling-from-coast-to-coast/", + "post_title": "196. Cycling from Coast to Coast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.654545Z", + "index": 2014070701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 195, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/04/195-british-comedy-monty-pythons-flying-circus/", + "post_title": "195. British Comedy_ Monty Python\u2019s Flying Circus", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.651546Z", + "index": 2014070401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 194, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/07/01/world-cup-2014-part-5-more-forum-comments/", + "post_title": "194. World Cup 2014 (Part 5_ More Forum Comments)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.649547Z", + "index": 2014070101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 192, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/30/192-culture-shock-life-in-london-part-1/", + "post_title": "192. Culture Shock_ Life in London (Pt.1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.594571Z", + "index": 2014063001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 191, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/25/191-culture-shock-the-4-stages/", + "post_title": "191. Culture Shock_ The 4 Stages", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.592572Z", + "index": 2014062501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 190, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/23/190-world-cup-2014-part-4-some-history/", + "post_title": "190. World Cup 2014 (Part 4_ Dad\u2019s Memories of 1966)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.589567Z", + "index": 2014062301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 189, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/20/189-world-cup-2014-part-3-your-comments/", + "post_title": "189. World Cup 2014 (Part 3_ Your Comments)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.587568Z", + "index": 2014062001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 188, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/18/188-world-cup-2014-part-2-england-the-dark-side-of-the-world-cup/", + "post_title": "188. World Cup 2014 (Part 2_ England & The Dark Side of the World Cup)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.584574Z", + "index": 2014061802, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 187, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/18/187-world-cup-2014-part-1/", + "post_title": "187. World Cup 2014 (Part 1_ The Basic Guide)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.582576Z", + "index": 2014061801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 186, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/16/understanding-culture-shock/", + "post_title": "186. Understanding Culture Shock with Lindsay & Gabby", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.579576Z", + "index": 2014061601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 185, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/13/the-trip-to-new-york/", + "post_title": "185. The Trip to New York", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.577577Z", + "index": 2014061301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/11/welcome-to-the-new-website-teacherluke-co-uk/", + "post_title": "Welcome to the New Website \u2013 teacherluke.co.uk", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.575572Z", + "index": 2014061101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 184, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/10/184-lukes-d-day-diary-part-2/", + "post_title": "184. Luke\u2019s D-Day Diary (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.572572Z", + "index": 2014061002, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 183, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/06/10/183-lukes-d-day-diary/", + "post_title": "183. Luke\u2019s D-Day Diary", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.568573Z", + "index": 2014061001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 182, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/05/30/182-learning-english-with-yacine-belhousse/", + "post_title": "182. Learning English with Yacine Belhousse", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.566580Z", + "index": 2014053001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/05/28/my-interview-on-all-ears-english-podcast/", + "post_title": "My Interview on the All Ears English Podcast \u2013 Talking about humour, comedy and how to tell jokes in English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.563582Z", + "index": 2014052801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 181, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/05/23/181-vocabulary-expressions-from-episode-180/", + "post_title": "181. Vocabulary & Expressions from Episode 180", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.561582Z", + "index": 2014052301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 180, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/05/20/180-dislocated-shoulder/", + "post_title": "180. How my Brother Dislocated his Shoulder (with James)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.558583Z", + "index": 2014052001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 179, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/05/15/179-the-ramblings-of-an-exhausted-teacher/", + "post_title": "179. The Ramblings of an Exhausted Teacher", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.556583Z", + "index": 2014051501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 178, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/04/30/178-im-still-here/", + "post_title": "178. I\u2019m Still Here", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.553578Z", + "index": 2014043001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/04/06/a-letter-to-my-listeners/", + "post_title": "A Letter to My Listeners", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.551578Z", + "index": 2014040601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 177, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/04/01/177-what-londoners-say-vs-what-they-mean/", + "post_title": "177. What Londoners Say vs What They Mean", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.549585Z", + "index": 2014040101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 176, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/03/24/176-grammar-verb-tense-review/", + "post_title": "176. Grammar_ Verb Tense Review", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.546581Z", + "index": 2014032401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 175, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/03/18/175-the-phrasal-verb-chronicles-1/", + "post_title": "175. The Phrasal Verb Chronicles #1", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.543582Z", + "index": 2014031801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 174, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/03/12/174-how-to-learn-english-with-lukes-english-podcast/", + "post_title": "174. How to Learn English with Luke\u2019s English Podcast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.540583Z", + "index": 2014031201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 173, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/03/06/173-the-curse-of-the-lambton-worm/", + "post_title": "173. The Curse of The Lambton Worm", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.537584Z", + "index": 2014030601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 172, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/02/26/172-british-comedy-peter-cook-dudley-moore/", + "post_title": "172. British Comedy_ Peter Cook & Dudley Moore", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.534590Z", + "index": 2014022601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 171, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/02/21/171-a-cup-of-tea-with-daniel-burt-part-2/", + "post_title": "171. A Cup of Tea with Daniel Burt (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.532591Z", + "index": 2014022101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 170, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/02/19/170-basking-in-my-moment-of-glory/", + "post_title": "170. Basking in My Moment of Glory", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.529592Z", + "index": 2014021901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 169, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/02/15/danielburt/", + "post_title": "169. A Cup of Tea with Daniel Burt (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.527587Z", + "index": 2014021501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 168, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/02/11/168-please-vote-and-stuff-like-that/", + "post_title": "168. Please Vote! (and stuff like that)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.525587Z", + "index": 2014021101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 167, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/02/05/167-memory-mnemonics-learning-english/", + "post_title": "167. Memory, Mnemonics & Learning English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.522595Z", + "index": 2014020501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 166, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/01/31/166-the-prawn-story/", + "post_title": "166. The Prawn Story", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.518589Z", + "index": 2014013101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 165, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/01/23/english-premier-league-football/", + "post_title": "165. English Premier League Football", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.515597Z", + "index": 2014012301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 164, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/01/21/164-transcript-collaboration/", + "post_title": "164. Transcript Collaboration", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.513591Z", + "index": 2014012101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 163, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/01/15/163-skype-chat-with-my-brother/", + "post_title": "163. Skype Chat with My Brother", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.510599Z", + "index": 2014011501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 162, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/01/10/162-having-babies-vocabulary-a-male-perspective/", + "post_title": "162. Having Babies_ Vocabulary _ A Male Perspective", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.508600Z", + "index": 2014011001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 161, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2014/01/09/161-shes-having-a-baby/", + "post_title": "161. She\u2019s Having a Baby", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.505594Z", + "index": 2014010901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 160, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/12/24/160-the-a-to-z-of-christmas/", + "post_title": "160. The A to Z of Christmas", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.502595Z", + "index": 2013122401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 158, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/12/23/158-159-a-cup-of-christmas-tea-with-paul-taylor/", + "post_title": "158 & 159. A Cup of Christmas Tea with\u2026 Paul Taylor", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.500595Z", + "index": 2013122302, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 157, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/12/23/157-a-cup-of-coffee-with-sarah-donnelly-part-2/", + "post_title": "157. A Cup of Coffee with\u2026 Sarah Donnelly (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.497597Z", + "index": 2013122301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 156, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/12/12/156-british-comedy-ali-g/", + "post_title": "156. British Comedy_ Ali G", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.495602Z", + "index": 2013121201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 155, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/12/05/155-a-cup-of-coffee-with-sarah-donnelly/", + "post_title": "155. A Cup of Coffee with\u2026 Sarah Donnelly", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.493598Z", + "index": 2013120501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 154, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/11/27/154-british-slang-h-to-m/", + "post_title": "154. British Slang (H to M)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.490599Z", + "index": 2013112701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 153, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/11/20/153-the-talking-dog-story/", + "post_title": "153. The Talking Dog Story", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.488599Z", + "index": 2013112001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/11/14/doctor-who-episode-language-analysis/", + "post_title": "Doctor Who Episode \u2013 Language Analysis", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.485605Z", + "index": 2013111401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 152, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/11/06/152-im-leaving-podomatic-and-moving-to-audioboo-fm/", + "post_title": "152. I\u2019m leaving Podomatic\u2026 and moving to Audioboo.fm", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.483606Z", + "index": 2013110601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 151, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/10/25/151-google-questions/", + "post_title": "151. Google Questions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.480606Z", + "index": 2013102502, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 150, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/10/25/150-british-slang-d-to-g/", + "post_title": "150. British Slang (D to G)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.478607Z", + "index": 2013102501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 149, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/10/15/149-backing-up-into-the-cloud/", + "post_title": "149. Backing Up Into The Cloud", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.476603Z", + "index": 2013101501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 148, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/09/12/148-british-slang-a-to-c/", + "post_title": "148. British Slang (A to C)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.474604Z", + "index": 2013091201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 147, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/09/08/147-idioms-and-expressions-from-episodes-145-146/", + "post_title": "147. Idioms and Expressions from Episodes 145 & 146", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.471605Z", + "index": 2013090801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 146, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/09/05/146-nightmare-teaching-experiences-part-2/", + "post_title": "146. Nightmare Teaching Experiences (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.468610Z", + "index": 2013090501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 145, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/09/02/145-nightmare-teaching-experiences-part-1/", + "post_title": "145. Nightmare Teaching Experiences (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.466611Z", + "index": 2013090201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 144, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/08/29/144-the-chaos-of-english-pronunciation/", + "post_title": "144. The Chaos of English Pronunciation", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.463612Z", + "index": 2013082901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 143, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/08/19/143-a-cup-of-tea-with-robert-hoehn/", + "post_title": "143. A Cup of Tea with\u2026 Robert Hoehn", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.461612Z", + "index": 2013081901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 142, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/08/04/142-the-annual-general-meeting-part-2/", + "post_title": "142. The Annual General Meeting (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.459613Z", + "index": 2013080402, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 141, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/08/04/141-the-annual-general-meeting-part-1/", + "post_title": "141. The Annual General Meeting (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.457614Z", + "index": 2013080401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 140, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/07/31/140-ghost-stories/", + "post_title": "140. Ghost Stories", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.454616Z", + "index": 2013073101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 139, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/07/09/139-hard-driving/", + "post_title": "139. Hard Driving", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.451611Z", + "index": 2013070901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 138, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/07/07/138-discussing-movies-part-2/", + "post_title": "138. Discussing Movies (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.449612Z", + "index": 2013070701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 137, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/06/29/137-discussing-movies-part-1/", + "post_title": "137. Discussing Movies (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.447613Z", + "index": 2013062901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 136, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/06/23/136-clycling-from-london-to-paris/", + "post_title": "136. Cycling from London to Paris", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.445613Z", + "index": 2013062301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 135, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/06/17/135-raining-animals/", + "post_title": "135. Raining Animals", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.443614Z", + "index": 2013061701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 134, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/06/11/134-the-story-of-salvo/", + "post_title": "134. The Story of Salvo", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.440615Z", + "index": 2013061101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/06/04/old-comments/", + "post_title": "Old Comments Box Archive", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.438616Z", + "index": 2013060401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 133, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/06/01/133-hip-hop-lyric-analysis/", + "post_title": "133. Hip-Hop Lyric Analysis", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.434622Z", + "index": 2013060101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 132, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/05/17/132-pronouncing-ed-endings-with-added-romance-and-horror/", + "post_title": "132. Pronouncing ~ed Endings (with Added Romance and Horror)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.432617Z", + "index": 2013051701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 131, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/05/01/131-rickipedia/", + "post_title": "131. Rickipedia", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.430619Z", + "index": 2013050101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 130, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/04/17/130-a-cup-of-tea-with-sebastian-marx/", + "post_title": "130. A Cup of Tea with\u2026 Sebastian Marx", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.427619Z", + "index": 2013041701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 129, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/04/10/129-a-cup-of-tea-with-pierre-gaspard/", + "post_title": "129. A Cup of Tea with\u2026 Pierre Gaspard", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.425620Z", + "index": 2013041001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 128, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/04/07/795/", + "post_title": "128. Luke\u2019s Stand-Up Comedy Show", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.423620Z", + "index": 2013040701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/03/26/mini-podcast-feeling-nervous/", + "post_title": "Mini Podcast \u2013 Feeling Nervous", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.421623Z", + "index": 2013032601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 127, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/03/04/127-computer-games/", + "post_title": "127. Computer Games", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.417622Z", + "index": 2013030401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 126, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/02/20/126-your-emails-comments-and-questions/", + "post_title": "126. Your Emails, Comments and Questions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.414624Z", + "index": 2013022001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 125, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/02/14/125-the-pink-gorilla-story/", + "post_title": "125. The Pink Gorilla Story", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.411624Z", + "index": 2013021401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/01/23/another-award-winning-year/", + "post_title": "Another Award-Winning Year!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.409626Z", + "index": 2013012302, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 124, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/01/23/124-james-bond/", + "post_title": "124. James Bond", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.407625Z", + "index": 2013012301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/01/21/downloading-problems/", + "post_title": "Thanks for Voting _ Downloading Problems", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.404628Z", + "index": 2013012101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 123, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/01/20/123-whats-been-going-on/", + "post_title": "123. What\u2019s Been Going On_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.401627Z", + "index": 2013012001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2013/01/10/competition-time-again/", + "post_title": "Competition Time Again!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.399629Z", + "index": 2013011001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 122, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/12/20/122-the-end-of-the-world/", + "post_title": "122. The End of the World_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.397629Z", + "index": 2012122001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 121, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/12/10/121-americanisms-part-2/", + "post_title": "121_ Americanisms (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.395629Z", + "index": 2012121001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 120, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/11/10/120-americanisms/", + "post_title": "120. Americanisms", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.392631Z", + "index": 2012111001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 119, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/10/17/119-first-impressions-of-life-in-paris/", + "post_title": "119. First Impressions of Life in Paris", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.390632Z", + "index": 2012101702, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 118, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/10/17/118-sick-in-japan/", + "post_title": "118. Sick in Japan", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.385633Z", + "index": 2012101701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 117, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/10/11/117-psychics-cold-reading-barnum-statements/", + "post_title": "117. Psychics _ Cold Reading _ Barnum Statements", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.383634Z", + "index": 2012101101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 116, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/10/10/116-could-it-be-you/", + "post_title": "116. Could it be you\u2026_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.380635Z", + "index": 2012101001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 115, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/10/04/115-a-chat-about-music/", + "post_title": "115. A Chat About Music", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.378635Z", + "index": 2012100401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 114, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/10/02/693/", + "post_title": "114. Twelve Natural Expressions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.375636Z", + "index": 2012100201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 112, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/09/20/vocabulary-review-episodes-1-11/", + "post_title": "112. Vocabulary Review \u2013 Episodes 1-11", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.326653Z", + "index": 2012092001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 111, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/09/17/thanks-for-your-comments/", + "post_title": "111. Thanks for your comments", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.324653Z", + "index": 2012091701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 110, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/09/12/a-letter-from-luke/", + "post_title": "110. A Letter from Luke", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.321654Z", + "index": 2012091201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 109, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/08/29/friday-night-banter-aka-the-slightly-drunk-episode/", + "post_title": "109. Friday Night Banter (aka The Slightly Drunk Episode)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.318655Z", + "index": 2012082901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/08/06/london-olympics-2012/", + "post_title": "London Olympics 2012 (Video)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.316655Z", + "index": 2012080602, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 108, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/08/06/in-bed-with-luke/", + "post_title": "108. In Bed with Luke", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.314656Z", + "index": 2012080601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 107, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/07/02/messing-around-with-accents-and-voices/", + "post_title": "107. Messing Around with Accents and Voices", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.311657Z", + "index": 2012070201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 106, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/06/29/brighton-fringe-festival-3/", + "post_title": "106. Brighton Fringe Festival #3", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.309658Z", + "index": 2012062901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 105, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/06/17/brighton-fringe-festival-2/", + "post_title": "105. Brighton Fringe Festival #2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.307658Z", + "index": 2012061701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 104, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/06/07/brighton-fringe-festival-1/", + "post_title": "104. Brighton Fringe Festival #1", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.304660Z", + "index": 2012060701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 103, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/06/04/the-queen-and-the-royal-family/", + "post_title": "103. The Queen and The Royal Family", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.301660Z", + "index": 2012060401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 102, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/05/30/competition-winners/", + "post_title": "102. Competition Winners", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.299660Z", + "index": 2012053001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 101, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/05/17/a-note-from-luke/", + "post_title": "101. A Note from Luke", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.297661Z", + "index": 2012051701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 100, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/05/12/going-to-the-pub/", + "post_title": "100. Going To The Pub", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.295662Z", + "index": 2012051201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 99, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/29/the-rotary-sushi-bar-of-english/", + "post_title": "99. The Rotary Sushi Bar of English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.292663Z", + "index": 2012042901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 98, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/28/luke-vs-oliver-part-2/", + "post_title": "98. Luke vs Oliver (Part 2)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.290664Z", + "index": 2012042801, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 97, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/20/luke-vs-oliver-part-1/", + "post_title": "97. Luke vs Oliver (Part 1)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.288665Z", + "index": 2012042001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 94, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/12/competition-entries/", + "post_title": "94 \u2013 96. Competition Entries", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.284666Z", + "index": 2012041201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 93, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/11/weird-or-just-different/", + "post_title": "93. Weird\u2026 or just different_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.282667Z", + "index": 2012041101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 92, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/10/uk-royal-family-opinions-video-part-2-video-uploading-now-on-youtube/%20", + "post_title": "92. UK Royal Family Opinions \u2013 Video (Part 2) [TRANSCRIPT]", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.280667Z", + "index": 2012041004, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/10/competition-update/", + "post_title": "Competition Update", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.277667Z", + "index": 2012041003, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 91, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/10/the-a-to-z-of-random-thoughts/", + "post_title": "91. The A to Z of Random Thoughts", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.275668Z", + "index": 2012041002, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 90, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/04/10/competition-phrasal-verbs-a-b-c/", + "post_title": "90. Competition + Phrasal Verbs A, B + C", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.273670Z", + "index": 2012041001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 89, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/03/13/a-day-in-the-life/", + "post_title": "89. A Day In The Life", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.268671Z", + "index": 2012031301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 88, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/03/12/how-to-play-the-drums/", + "post_title": "88. How To Play The Drums", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.264673Z", + "index": 2012031201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 87, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/03/07/6-idioms-and-6-phrasal-verbs/", + "post_title": "87. 6 Idioms and 6 Phrasal Verbs", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.262673Z", + "index": 2012030702, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 86, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/03/07/criminal-law/", + "post_title": "86. Criminal Law", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.249678Z", + "index": 2012030701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 85, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/03/06/a-stand-up-comedy-gig/", + "post_title": "85. A Stand-up Comedy Gig", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.247678Z", + "index": 2012030602, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 84, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/03/06/lukes-english-braincast/", + "post_title": "84. Luke\u2019s English Braincast", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.244684Z", + "index": 2012030601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 83, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/01/30/how-to-swear-in-british-english-very-rude-content/", + "post_title": "83. How to Swear in British English \u2013 VERY RUDE CONTENT", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.242680Z", + "index": 2012013003, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 82, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/01/30/voting-elections-politics-government/", + "post_title": "82. Voting _ Elections _ Politics _ Government", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.240680Z", + "index": 2012013002, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 81, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/01/30/what-makes-a-great-teacher/", + "post_title": "81. What Makes a Great Teacher_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.237681Z", + "index": 2012013001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 80, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/01/23/essential-social-english/", + "post_title": "80. Essential Social English", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.234682Z", + "index": 2012012304, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 79, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/01/23/family-arguments-and-debates/", + "post_title": "79. Family Arguments and Debates", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.232682Z", + "index": 2012012303, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 78, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/01/23/christmas-its-all-about-family/", + "post_title": "78. Christmas \u2013 It\u2019s all about Family", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.230683Z", + "index": 2012012302, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 77, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/01/23/bear-vs-shark/", + "post_title": "77. Bear vs Shark", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.227684Z", + "index": 2012012301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 0, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2012/01/15/vote-for-lukes-english-podcast/", + "post_title": "VOTE FOR LUKE\u2019S ENGLISH PODCAST", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.225685Z", + "index": 2012011501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 76, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/11/07/mind-the-gap-how-to-use-the-london-underground/", + "post_title": "76. Mind The Gap \u2013 How to use the London Underground", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.222686Z", + "index": 2011110701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 75, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/11/03/258/", + "post_title": "75. Not a Distraction!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.219692Z", + "index": 2011110302, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 74, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/11/03/uk-royal-family-opinions-english-interviews-in-london/", + "post_title": "74. UK Royal Family Opinions \u2013 English Interviews in London", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.217692Z", + "index": 2011110301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 73, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/14/steve-jobs/", + "post_title": "73. Steve Jobs", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.214693Z", + "index": 2011101408, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 72, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/14/the-cheese-episode/", + "post_title": "72. The Cheese Episode", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.212694Z", + "index": 2011101407, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 71, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/14/the-ice-cream-episode/", + "post_title": "71. The Ice Cream Episode", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.210695Z", + "index": 2011101406, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 70, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/14/language-and-music/", + "post_title": "70. Language and Music", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.208695Z", + "index": 2011101405, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 69, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/14/common-errors-typical-mistakes/", + "post_title": "69. Common Errors _ Typical Mistakes", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.206696Z", + "index": 2011101404, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 68, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/14/childhood-growing-up-school-days-phrasal-verbs-and-expressions/", + "post_title": "68. Childhood _ Growing Up _ School Days \u2013 Phrasal Verbs and Expressions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.202697Z", + "index": 2011101403, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 67, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/14/cockney-london-accent/", + "post_title": "67. Cockney _ London Accent", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.200698Z", + "index": 2011101402, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 66, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/14/top-advice-for-learning-english-idioms-with-say-culture-shock/", + "post_title": "66. Top Advice for Learning English _ Idioms with \u2018say\u2019 _ Culture Shock", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.198698Z", + "index": 2011101401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 64, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/london-video-interviews-pt-5/", + "post_title": "64. London Video Interviews Part 5 (Video)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.196700Z", + "index": 2011101210, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 63, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/german-and-british-cultural-identity-paco-erhard-interview-part-2/", + "post_title": "63. German and British Cultural Identity \u2013 Paco Erhard interview part 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.194695Z", + "index": 2011101209, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 62, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/learning-english-advice-from-a-german-comedian-living-in-london/", + "post_title": "62. Learning English \u2013 Advice from a German comedian living in London", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.191696Z", + "index": 2011101208, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 61, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/127-hours-hand-idioms/", + "post_title": "61. 127 Hours _ \u2018Hand\u2019 Idioms", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.189696Z", + "index": 2011101207, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 60, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/the-kings-speech-mouth-idioms/", + "post_title": "60. The King\u2019s Speech _ \u2018Mouth\u2019 Idioms", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.185698Z", + "index": 2011101206, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 59, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/billy-connolly-interview-more-scottish-accent/", + "post_title": "59. Billy Connolly Interview _ More Scottish Accent", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.183698Z", + "index": 2011101205, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 58, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/scotland-scottish-accent/", + "post_title": "58. Scotland _ Scottish Accent", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.181699Z", + "index": 2011101204, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 57, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/birmingham-accent-12-phrasal-verbs-with-the-letter-a/", + "post_title": "57. Birmingham Accent _ 12 Phrasal Verbs with the letter \u2018A\u2019", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.178700Z", + "index": 2011101203, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 56, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/british-accents-and-dialects/", + "post_title": "56. British Accents and Dialects", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.176701Z", + "index": 2011101202, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 55, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/12/mini-podcasts-collection-1/", + "post_title": "55. Mini Podcasts Collection 1", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.173709Z", + "index": 2011101201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 54, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/halloween-guy-fawkes-night/", + "post_title": "54. Halloween _ Guy Fawkes Night", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.171703Z", + "index": 2011101112, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 53, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/discussing-grammar-with-my-brother/", + "post_title": "53. Discussing Grammar with My Brother", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.168704Z", + "index": 2011101111, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 52, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/154/", + "post_title": "52. London Video Interviews Part 4", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.165705Z", + "index": 2011101110, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 51, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/luke-answers-your-emails-and-questions/", + "post_title": "51. Luke Answers Your Emails and Questions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.163710Z", + "index": 2011101109, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 50, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/good-things-come-to-those-who-wait/", + "post_title": "50. Good Things Come To Those Who Wait", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.161711Z", + "index": 2011101108, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 49, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/stand-up-comedy/", + "post_title": "49. Stand Up Comedy", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.159708Z", + "index": 2011101107, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 48, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/useful-expressions-for-travelling/", + "post_title": "48. Useful Expressions for Travelling", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.156713Z", + "index": 2011101106, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 47, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/travelling-in-vietnam/", + "post_title": "47. Travelling in Vietnam", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.154710Z", + "index": 2011101105, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 46, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/46-im-on-holiday-ill-be-back-in-a-couple-of-weeks/", + "post_title": "46. I\u2019m on Holiday! I\u2019ll be back in a couple of weeks", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.151714Z", + "index": 2011101104, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 45, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/luke-andys-crime-stories/", + "post_title": "45. Luke & Andy\u2019s Crime Stories", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.149716Z", + "index": 2011101103, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 44, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/telling-anecdotes/", + "post_title": "44. Telling Anecdotes", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.146716Z", + "index": 2011101102, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 43, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/10/11/notting-hill-carnival-video-frustration-out-takes/", + "post_title": "43. Notting Hill Carnival Video Frustration (Out-takes)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.144717Z", + "index": 2011101101, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 41, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2011/03/29/london-video-interviews-pt-3/", + "post_title": "41. London Video Interviews Part 3 (Video)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.142717Z", + "index": 2011032901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 40, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2010/03/26/health-feeling-ill-phrasal-verbs-expressions/", + "post_title": "40. Health _ Feeling ill \u2013 Phrasal Verbs & Expressions", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.140718Z", + "index": 2010032603, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 39, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2010/03/26/subtitles-in-videos/", + "post_title": "39. Subtitles in Videos (Video)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.137715Z", + "index": 2010032602, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 37, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2010/03/26/116/", + "post_title": "37. London Video Interviews Part 2 (Video)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.135719Z", + "index": 2010032601, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 33, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/15/money-money-money-12-phrasal-verbs-more/", + "post_title": "33. Money Money Money \u2013 12 Phrasal Verbs & more\u2026", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.062744Z", + "index": 2009111501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 32, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/14/doctor-who/", + "post_title": "32. Doctor Who", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.060744Z", + "index": 2009111403, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 31, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/14/hello-argument-sketch/", + "post_title": "31. Hello! _ Argument Sketch", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.058744Z", + "index": 2009111402, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 30, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/14/the-mystery-continues/", + "post_title": "30. The Mystery Continues\u2026", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.055742Z", + "index": 2009111401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 29, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/12/mystery-story-narrative-tenses/", + "post_title": "29. Mystery Story _ Narrative Tenses", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.053742Z", + "index": 2009111202, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 28, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/12/interview-with-a-native-speaker-the-weather/", + "post_title": "28. Interview with a Native Speaker \u2013 The Weather", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.050747Z", + "index": 2009111201, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 27, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/10/british-weather-lots-of-exciting-vocabulary/", + "post_title": "27. British Weather (Lots of exciting vocabulary!!!)", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.048749Z", + "index": 2009111002, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 26, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/10/are-you-a-good-learner-of-english/", + "post_title": "26. Are you a good learner of English_", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.046749Z", + "index": 2009111001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 25, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/07/notting-hill-carnival-40-phrasal-verbs/", + "post_title": "25. Notting Hill Carnival \u2013 40 Phrasal Verbs", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.044749Z", + "index": 2009110702, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 24, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/11/07/music-idioms/", + "post_title": "24. Music Idioms", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.041750Z", + "index": 2009110701, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 23, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/20/summer-music-festivals/", + "post_title": "23. Summer Music Festivals", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.039751Z", + "index": 2009102003, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 22, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/20/full-interview-with-vicky-from-china/", + "post_title": "22. Full Interview with Vicky from China", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.035752Z", + "index": 2009102002, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 21, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/20/learning-english-with-podcasts-advice-from-a-chinese-student-at-oxford-university/", + "post_title": "21. Learning English with Podcasts \u2013 Advice from a Chinese student at Oxford University", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.033754Z", + "index": 2009102001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 20, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/beware-of-bad-pronunciation/", + "post_title": "20. Beware of Bad Pronunciation", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.031753Z", + "index": 2009101913, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 19, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/passive-verb-forms/", + "post_title": "19. Passive Verb Forms", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.029754Z", + "index": 2009101912, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 18, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/46/", + "post_title": "18. 10 More Phrasal Verbs", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.027755Z", + "index": 2009101911, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 17, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/hello-to-my-listeners-around-the-world/", + "post_title": "17. Hello To My Listeners Around The World", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:29.024755Z", + "index": 2009101910, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 14, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/episode-10-british-and-american-pronunciation/", + "post_title": "14. British & American Pronunciation", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.906794Z", + "index": 2009101907, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 13, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/video-podcast-i-like-it/", + "post_title": "13. Video Podcast \u2013 I LIKE IT!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.903791Z", + "index": 2009101906, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 12, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/extra-podcast-quick-hello-3/", + "post_title": "12. Extra Podcast \u2013 Quick Hello 3", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.901795Z", + "index": 2009101905, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 11, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/episode-9-men-vs-women/", + "post_title": "11. Men vs Women", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.898797Z", + "index": 2009101904, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 10, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/extra-podcast-quick-hello-2/", + "post_title": "10. Extra Podcast \u2013 Quick Hello 2", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.896798Z", + "index": 2009101903, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 9, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/episode-8-travelling-in-india/", + "post_title": "9. Travelling in India", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.894798Z", + "index": 2009101902, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 8, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/10/19/episode-7-dating-and-relationships/", + "post_title": "8. Dating and Relationships", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.892798Z", + "index": 2009101901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 7, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/04/30/episode-6-susan-boyle/", + "post_title": "7. Susan Boyle", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.890800Z", + "index": 2009043001, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 6, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/04/24/episode-5-vampires/", + "post_title": "6. Vampires!", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.887797Z", + "index": 2009042401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 5, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/04/23/episode-4-joaquin-phoenix/", + "post_title": "5. Joaquin Phoenix", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.885801Z", + "index": 2009042301, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 4, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/04/19/extra-podcast-quick-hello/", + "post_title": "4. Extra Podcast \u2013 Quick Hello", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.882802Z", + "index": 2009041901, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 3, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/04/15/episode-3-musicthe-beatles/", + "post_title": "3. Music_The Beatles", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.880804Z", + "index": 2009041501, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + }, + { + "episode": 2, + "date": "2000-01-01T02:00:00+0200", + "url": "https://teacherluke.co.uk/2009/04/14/episode-2-easter/", + "post_title": "2. Easter _ Interview with my Dad _ Language Focus_ Adverbials", + "post_type": "", + "files": {}, + "parsed_at": "2022-01-26T05:47:28.878804Z", + "index": 2009041401, + "admin_note": "[ERROR]: Unhandled error | No mock address: GET ht", + "updated_at": "" + } +] \ No newline at end of file diff --git a/tests/test_cli.py b/tests/test_cli.py index edc541e..80d17e3 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -5,11 +5,11 @@ from click.testing import CliRunner from click.testing import Result -from lep_downloader import cli - def test_main_succeeds(runner: CliRunner) -> None: """It exits with a status code of zero.""" + from lep_downloader import cli + result = runner.invoke(cli.cli) assert result.exit_code == 0 diff --git a/tests/test_cli_download.py b/tests/test_cli_download.py index 476d4b1..5155ce6 100644 --- a/tests/test_cli_download.py +++ b/tests/test_cli_download.py @@ -20,20 +20,829 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """Test cases for the download command module.""" +from pathlib import Path from typing import Callable from typing import List +from click.testing import CliRunner from click.testing import Result +from pytest_mock import MockFixture from requests_mock.mocker import Mocker as rm_Mocker +from lep_downloader import config as conf -def test_download_stub_call( + +def test_json_database_not_available( requests_mock: rm_Mocker, run_cli_with_args: Callable[[List[str]], Result], ) -> None: - """It prints message and exits.""" - # TODO (hotenov): Update in release version + """It prints message and exits when JSON is unavailable.""" + requests_mock.get( + conf.JSON_DB_URL, + text="JSON not found", + status_code=404, + ) result = run_cli_with_args(["download"]) - assert "download_cmd()" in result.output - assert "was executed..." in result.output + assert "JSON database is not available now.\n" in result.output + assert "Try again later." in result.output + assert result.exit_code == 0 + + +def test_json_database_not_available_in_quite_mode( + requests_mock: rm_Mocker, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It aborts following execution when JSON is unavailable. + + Even in 'quiet' mode. + """ + requests_mock.get( + conf.JSON_DB_URL, + text="JSON not found", + status_code=404, + ) + result = run_cli_with_args(["download", "--quiet"]) + assert "JSON database is not available now.\n" in result.output + assert "Try again later." in result.output + assert result.exit_code == 0 + + +def test_download_without_options( + requests_mock: rm_Mocker, + json_db_mock: str, + runner: CliRunner, +) -> None: + """It downloads all audio files for parsed episodes.""" + from lep_downloader import cli + + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + result = runner.invoke( + cli.cli, + ["download"], + prog_name="lep-downloader", + input="n\n", + ) + assert "18 non-existing file(s) will be downloaded" in result.output + assert "Do you want to continue? [y/N]: n\n" in result.output + assert "Your answer is 'NO'. Exit." in result.output + + +def test_continue_prompt_yes( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + tmp_path: Path, + runner: CliRunner, +) -> None: + """It downloads files if user answers 'Yes'.""" + from lep_downloader import cli + + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "https://traffic.libsyn.com/secure/teacherluke/703._Walaa_from_Syria_-_WISBOLEP_Competition_Winner_.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + + result = runner.invoke( + cli.cli, + ["download", "-ep", "703", "-pdf", "-d", f"{tmp_path}"], + prog_name="lep-downloader", + input="y\n", + ) + + expected_filename = "[2021-02-03] # 703. Walaa from Syria – WISBOLEP Competition Winner.mp3" # noqa: E501,B950 + expected_file = tmp_path / expected_filename + assert "Do you want to continue? [y/N]: y\n" in result.output + assert len(list(tmp_path.iterdir())) == 1 + # assert len(LepDL.downloaded) == 1 + # assert len(LepDL.not_found) == 1 # Page PDF file + assert expected_file.exists() + + +def test_continue_prompt_no( + requests_mock: rm_Mocker, + json_db_mock: str, + tmp_path: Path, + runner: CliRunner, +) -> None: + """It exists if user answers 'No'.""" + from lep_downloader import cli + + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + + result = runner.invoke( + cli.cli, + ["download", "-ep", "714"], + prog_name="lep-downloader", + input="No", + ) + assert "Do you want to continue? [y/N]: No\n" in result.output + assert "Your answer is 'NO'. Exit." in result.output + assert len(list(tmp_path.iterdir())) == 0 + + result = runner.invoke( + cli.cli, + ["download", "-ep", "714"], + prog_name="lep-downloader", + input="\n", # Pressed 'Enter' key (empty input) + ) + + assert "Your answer is 'NO'. Exit." in result.output + assert len(list(tmp_path.iterdir())) == 0 + + +def test_no_valid_episodes_in_database( + requests_mock: rm_Mocker, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It prints message and exits if no episodes in JSON database.""" + requests_mock.get( + conf.JSON_DB_URL, + text="[]", + ) + result = run_cli_with_args(["download"]) + assert ( + f"[WARNING]: JSON file ({conf.JSON_DB_URL}) has no valid episode objects." + in result.output + ) + assert result.exit_code == 0 + + +def test_no_valid_episodes_quiet_mode( + requests_mock: rm_Mocker, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It aborts following execution if no episodes in JSON database. + + Even in 'quiet' mode + """ + requests_mock.get( + conf.JSON_DB_URL, + text="[]", + ) + result = run_cli_with_args(["download", "--quiet"]) + assert ( + f"[WARNING]: JSON file ({conf.JSON_DB_URL}) has no valid episode objects." + in result.output + ) + assert result.exit_code == 0 + + +def test_last_option( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It downloads the last episode when '--last' option is provided.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + + run_cli_with_args(["download", "-ep", "113", "--last", "-q", "-d", f"{tmp_path}"]) + + expected_filename = "[2021-08-03] # 733. A Summer Ramble.mp3" + expected_file = tmp_path / expected_filename + # assert len(Lep.db_episodes) == 782 # Total in mocked JSON + assert len(list(tmp_path.iterdir())) == 1 + # assert len(LepDL.downloaded) == 1 + # assert len(LepDL.not_found) == 0 + assert expected_file.exists() + + +def test_filtering_for_one_day( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + mp3_file2_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It downloads all episodes for certain day.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "http://traffic.libsyn.com/teacherluke/15-extra-podcast-12-phrasal-verbs.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + requests_mock.get( + "http://traffic.libsyn.com/teacherluke/16-michael-jackson.mp3", # noqa: E501,B950 + content=mp3_file2_mock, + ) + + run_cli_with_args( + ["download", "-S", "2009-10-19", "-E", "2009-10-19", "-q", "-d", f"{tmp_path}"] + ) + + expected_filename_1 = "[2009-10-19] # 15. Extra Podcast – 12 Phrasal Verbs.mp3" + expected_file_1 = tmp_path / expected_filename_1 + expected_filename_2 = "[2009-10-19] # 16. Michael Jackson.mp3" + expected_file_2 = tmp_path / expected_filename_2 + assert len(list(tmp_path.iterdir())) == 2 + # assert len(LepDL.downloaded) == 2 + # assert len(LepDL.not_found) == 0 + assert expected_file_1.exists() + assert expected_file_2.exists() + + +def test_filtering_by_start_date( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + mp3_file2_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It downloads all episodes from start date to last.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "https://audioboom.com/posts/5602875-episode-166-luke-back-on-zep-part-1.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + requests_mock.get( + "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 + content=mp3_file2_mock, + ) + + run_cli_with_args(["download", "-S", "2017-03-11", "-q", "-d", f"{tmp_path}"]) + + expected_filename_1 = "[2017-03-11] # LEP on ZEP – My recent interview on Zdenek’s English Podcast [Part 01].mp3" # noqa: E501,B950 + expected_file_1 = tmp_path / expected_filename_1 + expected_filename_2 = "[2021-08-03] # 733. A Summer Ramble.mp3" # noqa: E501,B950 + expected_file_2 = tmp_path / expected_filename_2 + assert len(list(tmp_path.iterdir())) == 2 + # assert len(LepDL.downloaded) == 2 + # assert len(LepDL.not_found) == 7 + assert expected_file_1.exists() + assert expected_file_2.exists() + + +def test_filtering_by_end_date( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + mp3_file2_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It downloads all episodes from first to end date.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "http://traffic.libsyn.com/teacherluke/1-introduction.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + requests_mock.get( + "http://traffic.libsyn.com/teacherluke/370-in-conversation-with-rob-ager-from-liverpool-part-1-life-in-liverpool-interest-in-film-analysis.mp3", # noqa: E501,B950 + content=mp3_file2_mock, + ) + + run_cli_with_args(["download", "-E", "2016-08-07", "-q", "-d", f"{tmp_path}"]) + + expected_filename_1 = "[2009-04-12] # 1. Introduction.mp3" + expected_file_1 = tmp_path / expected_filename_1 + expected_filename_2 = "[2016-08-07] # 370. In Conversation with Rob Ager from Liverpool (PART 1_ Life in Liverpool _ Interest in Film Analysis).mp3" # noqa: E501,B950 + expected_file_2 = tmp_path / expected_filename_2 + assert len(list(tmp_path.iterdir())) == 2 + # assert len(LepDL.downloaded) == 2 + # assert len(LepDL.not_found) == 7 + assert expected_file_1.exists() + assert expected_file_2.exists() + + +def test_invalid_start_date_inputs( + requests_mock: rm_Mocker, + json_db_mock: str, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It validates and exits with error (2) when invalid start date is provided.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + + result = run_cli_with_args(["download", "-q", "-S"]) + assert "Error: Option '-S' requires an argument." in result.output + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-S", " ", "-q"]) + assert ( + "Error: Invalid value for '-S': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-S", "2022-01-xx", "-q"]) + assert ( + "Error: Invalid value for '-S': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-S", "2022/01/23", "-q"]) + assert ( + "Error: Invalid value for '-S': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-S", "2022-13-23", "-q"]) + assert ( + "Error: Invalid value for '-S': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args( + ["download", "-S", "2022-xx-23", "-E", "2022-01-01" "-q"] + ) + assert ( + "Error: Invalid value for '-S': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + +def test_invalid_end_date_inputs( + requests_mock: rm_Mocker, + json_db_mock: str, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It validates and exits with error (2) when invalid end date is provided.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + + result = run_cli_with_args(["download", "-q", "-E"]) + assert "Error: Option '-E' requires an argument." in result.output + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-E", " ", "-q"]) + assert ( + "Error: Invalid value for '-E': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-E", "2022-01-xx", "-q"]) + assert ( + "Error: Invalid value for '-E': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-E", "2022/01/23", "-q"]) + assert ( + "Error: Invalid value for '-E': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-E", "2022-13-23", "-q"]) + assert ( + "Error: Invalid value for '-E': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args( + ["download", "-E", "2022-xx-23", "-S", "2022-01-01" "-q"] + ) + assert ( + "Error: Invalid value for '-E': date format must be 'YYYY-MM-DD'" + in result.output + ) + assert result.exit_code == 2 + + +def test_populating_default_url_for_page_pdf( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It populates URL and downloads page PDF.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "https://hotenov.com/d/lep/%5B2017-08-26%5D%20%23%20%5BWebsite%20only%5D%20A%20History%20of%20British%20Pop%20%E2%80%93%20A%20Musical%20Tour%20through%20James%E2%80%99%20Vinyl%20Collection.pdf", # noqa: E501,B950 + content=mp3_file1_mock, + ) + + run_cli_with_args( + [ + "download", + "-pdf", + "-S", + "2017-08-26", + "-E", + "2017-08-26", + "-q", + "-d", + f"{tmp_path}", + ] + ) + + expected_filename_1 = "[2017-08-26] # [Website only] A History of British Pop – A Musical Tour through James’ Vinyl Collection.pdf" # noqa: E501,B950 + expected_file_1 = tmp_path / expected_filename_1 + assert len(list(tmp_path.iterdir())) == 1 + # assert len(LepDL.downloaded) == 1 + # assert len(LepDL.not_found) == 0 + assert expected_file_1.exists() + + +def test_filtering_by_one_episode_number( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It downloads one episode by its number.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + # Note: URL for #36 not for #35 (because it is 'duplicated' episode) + requests_mock.get( + "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + + run_cli_with_args(["download", "-ep", "35", "-q", "-d", f"{tmp_path}"]) + + expected_filename_1 = "[2010-03-25] # 35. London Video Interviews – Part 1 (Video).mp3" # noqa: E501,B950 + expected_file_1 = tmp_path / expected_filename_1 + assert len(list(tmp_path.iterdir())) == 1 + # assert len(LepDL.downloaded) == 1 + # assert len(LepDL.not_found) == 0 + assert expected_file_1.exists() + + +def test_filtering_not_numbered_episodes( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + mp3_file2_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It downloads all episodes with number = 0.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "https://audioboom.com/posts/5678762-episode-169-luke-back-on-zep-part-4.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + requests_mock.get( + "https://hotenov.com/d/lep/%5B2017-05-26%5D%20%23%20I%20was%20invited%20onto%20the%20%E2%80%9CEnglish%20Across%20The%20Pond%E2%80%9D%20Podcast.pdf", # noqa: E501,B950 + content=mp3_file2_mock, + ) + + run_cli_with_args( + ["download", "-ep", "0-0", "--with-pdf", "-q", "-d", f"{tmp_path}"] + ) + + expected_filename_1 = "[2017-03-11] # LEP on ZEP – My recent interview on Zdenek’s English Podcast [Part 04].mp3" # noqa: E501,B950 + expected_file_1 = tmp_path / expected_filename_1 + expected_filename_2 = "[2017-05-26] # I was invited onto the “English Across The Pond” Podcast.pdf" # noqa: E501,B950 + expected_file_2 = tmp_path / expected_filename_2 + assert len(list(tmp_path.iterdir())) == 2 + # assert len(LepDL.downloaded) == 2 + # assert len(LepDL.not_found) == 6 + assert expected_file_1.exists() + assert expected_file_2.exists() + + +def test_filtering_by_number_with_default_start( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + mp3_file2_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It downloads all episodes from 0 to provided number.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "https://audioboom.com/posts/5695159-episode-170-luke-back-on-zep-part-5-analysis.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + requests_mock.get( + "http://traffic.libsyn.com/teacherluke/16-michael-jackson.mp3", # noqa: E501,B950 + content=mp3_file2_mock, + ) + + run_cli_with_args(["download", "-ep", "-16", "-q", "-d", f"{tmp_path}"]) + + expected_filename_1 = "[2017-03-11] # LEP on ZEP – My recent interview on Zdenek’s English Podcast [Part 05].mp3" # noqa: E501,B950 + expected_file_1 = tmp_path / expected_filename_1 + expected_filename_2 = "[2009-10-19] # 16. Michael Jackson.mp3" # noqa: E501,B950 + expected_file_2 = tmp_path / expected_filename_2 + assert len(list(tmp_path.iterdir())) == 2 + # assert len(LepDL.downloaded) == 2 + # assert len(LepDL.not_found) == 6 + assert expected_file_1.exists() + assert expected_file_2.exists() + + +def test_filtering_by_number_with_default_end( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + mp3_file2_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It downloads all episodes from provided number to last.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "https://traffic.libsyn.com/secure/teacherluke/703._Walaa_from_Syria_-_WISBOLEP_Competition_Winner_.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + requests_mock.get( + "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 + content=mp3_file2_mock, + ) + + run_cli_with_args(["download", "-ep", "703-", "-q", "-d", f"{tmp_path}"]) + + expected_filename_1 = "[2021-02-03] # 703. Walaa from Syria – WISBOLEP Competition Winner.mp3" # noqa: E501,B950 + expected_file_1 = tmp_path / expected_filename_1 + expected_filename_2 = "[2021-08-03] # 733. A Summer Ramble.mp3" # noqa: E501,B950 + expected_file_2 = tmp_path / expected_filename_2 + assert len(list(tmp_path.iterdir())) == 2 + # assert len(LepDL.downloaded) == 2 + # assert len(LepDL.not_found) == 2 + assert expected_file_1.exists() + assert expected_file_2.exists() + + +def test_invalid_number_inputs( + requests_mock: rm_Mocker, + json_db_mock: str, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It validates and exits with error (2) when invalid episode number is provided.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + + result = run_cli_with_args(["download", "-q", "-ep"]) + assert "Error: Option '-ep' requires an argument." in result.output + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-ep", " ", "-q"]) + assert ( + "Invalid value for '--episode' / '-ep': ' ' is not a valid integer range." + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-ep", "xxx", "-q"]) + assert ( + "Invalid value for '--episode' / '-ep': 'xxx' is not a valid integer range." + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-ep", "1-xxx", "-q"]) + assert ( + "Invalid value for '--episode' / '-ep': 'xxx' is not a valid integer range." + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-ep", "xxx-2", "-q"]) + assert ( + "Invalid value for '--episode' / '-ep': 'xxx' is not a valid integer range." + in result.output + ) + assert result.exit_code == 2 + + result = run_cli_with_args(["download", "-ep", "0-None", "-q"]) + assert ( + "Invalid value for '--episode' / '-ep': 'None' is not a valid integer range." + in result.output + ) + assert result.exit_code == 2 + + +def test_custom_db_url( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It uses provided JSON URL instead of default.""" + requests_mock.get( + "https://hotenov.com/d/lep/3rd-version-test-mocked-db-782-objects.json", + text=json_db_mock, + ) + requests_mock.get( + "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + + run_cli_with_args( + [ + "download", + "--last", + "-q", + "-d", + f"{tmp_path}", + "-db", + "https://hotenov.com/d/lep/3rd-version-test-mocked-db-782-objects.json", + ] + ) + + expected_filename = "[2021-08-03] # 733. A Summer Ramble.mp3" + expected_file = tmp_path / expected_filename + # assert len(Lep.db_episodes) == 782 # Total in mocked JSON + assert len(list(tmp_path.iterdir())) == 1 + # assert len(LepDL.downloaded) == 1 + # assert len(LepDL.not_found) == 0 + assert expected_file.exists() + + +def test_no_files_for_downloading( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It prints and exits when nothing to download.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + requests_mock.get( + "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + + existing_file_1 = tmp_path / "[2021-08-03] # 733. A Summer Ramble.mp3" + existing_file_1.write_text("Fake episode #733") + result = run_cli_with_args( + ["download", "-S", "2020-01-20", "--last", "-q", "-d", f"{tmp_path}"] + ) + + assert len(list(tmp_path.iterdir())) == 1 + # assert len(LepDL.existed) == 1 + # assert len(LepDL.downloaded) == 0 + # assert len(LepDL.not_found) == 0 + assert "Nothing to download for now." in result.output + + +def test_no_permission_for_folder_destination( + mocker: MockFixture, + requests_mock: rm_Mocker, + json_db_mock: str, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It validates destination folder before downloading files. + + And exists with error (2) if folder has no 'write' permission. + """ + mock = mocker.patch("pathlib.Path.write_text") + mock.side_effect = PermissionError + + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + + result = run_cli_with_args(["download", "--last", "-q", "-d", f"{tmp_path}"]) + + assert ( + "Invalid value for '--dest' / '-d': folder has no 'write' permission." + in result.output + ) + assert result.exit_code == 2 + + +def test_os_error_for_folder_destination( + mocker: MockFixture, + requests_mock: rm_Mocker, + json_db_mock: str, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It validates destination folder before downloading files. + + And exists with error (2) if OSError exception is raised. + """ + mock = mocker.patch("pathlib.Path.write_text") + mock.side_effect = OSError(666, "Some message about exception.") + + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + + result = run_cli_with_args(["download", "--last", "-q", "-d", f"{tmp_path}"]) + + assert ( + "Invalid value for '--dest' / '-d': Some message about exception." + in result.output + ) + assert result.exit_code == 2 + + +def test_passing_options_from_group_to_command( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + tmp_path: Path, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It passes options to 'download' command from command group (script itself).""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + # Note: URL for #36 not for #35 (because it is 'duplicated' episode) + requests_mock.get( + "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + + run_cli_with_args(["-ep", "35", "-q", "-d", f"{tmp_path}"]) + + expected_filename_1 = "[2010-03-25] # 35. London Video Interviews – Part 1 (Video).mp3" # noqa: E501,B950 + expected_file_1 = tmp_path / expected_filename_1 + assert len(list(tmp_path.iterdir())) == 1 + # assert len(LepDL.downloaded) == 1 + # assert len(LepDL.not_found) == 0 + assert expected_file_1.exists() + + +def test_final_prompt_to_press_enter( + requests_mock: rm_Mocker, + json_db_mock: str, + mp3_file1_mock: bytes, + tmp_path: Path, + runner: CliRunner, +) -> None: + """It requires to press enter at the end of script execution.""" + from lep_downloader import cli + + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + + requests_mock.get( + "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3", # noqa: E501,B950 + content=mp3_file1_mock, + ) + + result = runner.invoke( + cli.cli, + ["-ep", "35", "-d", f"{tmp_path}"], + prog_name="lep-downloader", + input="\n", # Two inputs in this case. + ) + assert "Do you want to continue? [y/N]: \n" in result.output + # assert len(LepDL.downloaded) == 0 + # assert len(LepDL.not_found) == 0 + assert "Press 'Enter' key to close 'LEP-downloader':" in result.output assert result.exit_code == 0 diff --git a/tests/test_cli_parse.py b/tests/test_cli_parse.py index 73165bb..421f55b 100644 --- a/tests/test_cli_parse.py +++ b/tests/test_cli_parse.py @@ -39,8 +39,38 @@ def test_parse_incorrect_archive_url( """It prints error text and exits for incorrect archive page.""" requests_mock.get(conf.ARCHIVE_URL, text="Invalid archive page") result = run_cli_with_args(["parse"]) - assert "[ERROR]" in result.output - assert "Can't parse any episodes from archive page" in result.output + assert "[ERROR]:" in result.output + assert "Can't parse this page: <article> tag was not found." in result.output + assert f"\t{conf.ARCHIVE_URL}" in result.output + assert "Archive page has invalid HTML content. Exit." in result.output + assert result.exit_code == 0 + + +def test_parse_archive_without_episodes( + requests_mock: rm_Mocker, + run_cli_with_args: Callable[[List[str]], Result], +) -> None: + """It prints error text and exits for 'empty'archive.""" + fake_html = """ + <!DOCTYPE html> + <html> + <article id="post-1043" class="post-1043 page type-page status-publish has-post-thumbnail hentry"> + <header class="entry-header"> + <img width="624" height="277" src="" /> + <h1 class="entry-title">EPISODES</h1> + </header> + <div class="entry-content"> + <h2><strong>THE ARCHIVE OF ALL EPISODES OF THE PODCAST + some extra content</strong></h2> + </div> + </article> + </html> + """ # noqa: E501,B950 + requests_mock.get(conf.ARCHIVE_URL, text=fake_html) + result = run_cli_with_args(["parse"]) + # assert "[ERROR]:" in result.output + assert "[ERROR]: No episode links on archive page" in result.output + assert f"\t{conf.ARCHIVE_URL}" in result.output + assert "Can't parse any episodes. Exit." in result.output assert result.exit_code == 0 @@ -93,8 +123,8 @@ def test_parse_json_db_does_not_contain_episodes_in_plain_str( assert "[WARNING]" in result.output assert f"({conf.JSON_DB_URL})" in result.output assert "has no valid episode objects" in result.output - assert "JSON is available, but" in result.output - assert "there are NO episode in this file. Exit." in result.output + assert "\tJSON is available, but" in result.output + assert "there are NO episodes in this file. Exit." in result.output assert result.exit_code == 0 @@ -121,8 +151,8 @@ def test_parse_json_db_invalid_document( assert "[ERROR]" in result.output assert "Data is not a valid JSON document" in result.output assert f"URL: {conf.JSON_DB_URL}" in result.output - assert "JSON is available, but " in result.output - assert "there are NO episode in this file. Exit." in result.output + assert "\tJSON is available, but" in result.output + assert "there are NO episodes in this file. Exit." in result.output assert result.exit_code == 0 diff --git a/tests/test_downloader.py b/tests/test_downloader.py index 97ab88d..9f9bdeb 100644 --- a/tests/test_downloader.py +++ b/tests/test_downloader.py @@ -27,78 +27,81 @@ from pytest import CaptureFixture from requests_mock.mocker import Mocker as rm_Mocker -from lep_downloader import data_getter +from lep_downloader import config as conf from lep_downloader import downloader +from lep_downloader.downloader import ATrack +from lep_downloader.downloader import Audio +from lep_downloader.downloader import LepDL +from lep_downloader.downloader import LepFile +from lep_downloader.downloader import LepFileList +from lep_downloader.downloader import PagePDF +from lep_downloader.lep import Lep from lep_downloader.lep import LepEpisode +from lep_downloader.lep import LepEpisodeList def test_selecting_only_audio_episodes( only_audio_episodes: List[LepEpisode], ) -> None: """It returns filtered list with only audio episodes.""" - assert len(only_audio_episodes) == 15 + assert len(only_audio_episodes) == 14 # Without duplicates def test_extracting_audio_data( - only_audio_episodes: List[LepEpisode], + only_audio_episodes: LepEpisodeList, + lep_dl: LepDL, ) -> None: - """It returns list of tuples with audio data.""" - expected_ep = ( - "2009-10-19", - "15. Extra Podcast – 12 Phrasal Verbs", # noqa: E501,B950 # dash as Unicode character here. - [ - [ - "http://traffic.libsyn.com/teacherluke/15-extra-podcast-12-phrasal-verbs.mp3" # noqa: E501,B950 - ] - ], - False, + """It returns list of Audio files.""" + expected_audio = Audio( + ep_id=2009101908, # many posts in that day + name="15. Extra Podcast – 12 Phrasal Verbs", + short_date="2009-10-19", + filename="[2009-10-19] # 15. Extra Podcast – 12 Phrasal Verbs", + primary_url="http://traffic.libsyn.com/teacherluke/15-extra-podcast-12-phrasal-verbs.mp3", # noqa: E501,B950 ) - audio_data = downloader.get_audios_data(only_audio_episodes) - assert audio_data[1] == expected_ep + lep_dl.files = downloader.gather_all_files(only_audio_episodes) + audio_files = lep_dl.files.filter_by_type(Audio) + assert audio_files[1] == expected_audio def test_forming_multipart_download_links( - only_audio_links: downloader.NamesWithAudios, + only_audio_links: List[Tuple[str, str]], ) -> None: - """It returns list of URLs with titles for files.""" + """It returns list of URLs with titles for multipart episode.""" excepted_link = ( - "[2017-03-11] # LEP on ZEP – My recent interview on Zdenek’s English Podcast [Part 02]", # noqa: E501,B950 - [ - "https://audioboom.com/posts/5621870-episode-167-luke-back-on-zep-part-2.mp3", # noqa: E501,B950 - ], + "[2017-03-11] # LEP on ZEP – My recent interview on Zdenek’s English Podcast [Part 02].mp3", # noqa: E501,B950 + "https://audioboom.com/posts/5621870-episode-167-luke-back-on-zep-part-2.mp3", # noqa: E501,B950 ) - assert only_audio_links[11] == excepted_link + assert only_audio_links[10] == excepted_link def test_forming_numbered_download_link( - only_audio_links: downloader.NamesWithAudios, + only_audio_links: List[Tuple[str, str]], ) -> None: """It returns list of URLs with titles for files.""" excepted_link = ( - "[2021-02-03] # 703. Walaa from Syria – WISBOLEP Competition Winner", - [ - "https://traffic.libsyn.com/secure/teacherluke/703._Walaa_from_Syria_-_WISBOLEP_Competition_Winner_.mp3", # noqa: E501,B950 - ], + "[2021-02-03] # 703. Walaa from Syria – WISBOLEP Competition Winner.mp3", + "https://traffic.libsyn.com/secure/teacherluke/703._Walaa_from_Syria_-_WISBOLEP_Competition_Winner_.mp3", # noqa: E501,B950 ) - assert only_audio_links[15] == excepted_link + assert only_audio_links[14] == excepted_link def test_forming_safe_filename_for_downloading( - only_audio_links: downloader.NamesWithAudios, + only_audio_links: List[Tuple[str, str]], ) -> None: """It replaces invalid path characters with '_'.""" excepted_link = ( - "[2016-08-07] # 370. In Conversation with Rob Ager from Liverpool (PART 1_ Life in Liverpool _ Interest in Film Analysis)", # noqa: E501,B950 - [ - "http://traffic.libsyn.com/teacherluke/370-in-conversation-with-rob-ager-from-liverpool-part-1-life-in-liverpool-interest-in-film-analysis.mp3", # noqa: E501,B950 - ], + "[2016-08-07] # 370. In Conversation with Rob Ager from Liverpool (PART 1_ Life in Liverpool _ Interest in Film Analysis).mp3", # noqa: E501,B950 + "http://traffic.libsyn.com/teacherluke/370-in-conversation-with-rob-ager-from-liverpool-part-1-life-in-liverpool-interest-in-film-analysis.mp3", # noqa: E501,B950 ) - assert only_audio_links[9] == excepted_link + assert only_audio_links[8] == excepted_link def test_separating_existing_and_non_existing_mp3( - only_audio_links: downloader.NamesWithAudios, + requests_mock: rm_Mocker, + json_db_mock: str, tmp_path: Path, + lep_dl: LepDL, ) -> None: """It detects when file has already been downloaded.""" filename_1 = "[2021-08-03] # 733. A Summer Ramble.mp3" @@ -106,16 +109,22 @@ def test_separating_existing_and_non_existing_mp3( Path(tmp_path / filename_1).write_text("Here are mp3 1 bytes") Path(tmp_path / filename_2).write_text("Here are mp3 2 bytes") - existing, non_existing = downloader.detect_existing_files( - only_audio_links, - tmp_path, + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, ) - assert len(existing) == 2 - assert len(non_existing) == 17 + lep_dl.use_or_get_db_episodes() + lep_dl.files = downloader.gather_all_files(lep_dl.db_episodes) + audio_files = lep_dl.files.filter_by_type(Audio) + lep_dl.detach_existed_files(tmp_path, audio_files) + assert len(lep_dl.existed) == 2 + assert len(lep_dl.non_existed) == 16 -def test_retrieving_audios_as_none() -> None: - """It replaces None to empty list.""" +def test_retrieving_audios_as_none( + lep_dl: LepDL, +) -> None: + """It sets None to empty list and skip it.""" json_test = """\ [ { @@ -124,16 +133,22 @@ def test_retrieving_audios_as_none() -> None: "url": "https://teacherluke.co.uk/2009/04/15/episode-3-musicthe-beatles/", "post_title": "3. Music/The Beatles", "post_type": "", - "audios": null, - "parsing_utc": "2021-10-14T07:35:24.575575Z", + "files": { + "audios": null, + "page_pdf": [] + }, + "parsed_at": "2021-10-14T07:35:24.575575Z", "index": 2009041501, "admin_note": "Edge case - null in 'audios'" } ] """ # noqa: E501,B950 - db_episodes = data_getter.get_list_of_valid_episodes(json_test) - audio_data = downloader.get_audios_data(db_episodes) - assert audio_data[0][2] == [] + db_episodes = Lep.extract_only_valid_episodes(json_test) + db_episodes[0].files["audios"] = None + # Check that 'empty' files (lists) are ignored. + lep_dl.files = downloader.gather_all_files(db_episodes) + assert len(lep_dl.files) == 1 + assert isinstance(lep_dl.files[0], PagePDF) def test_downloading_mocked_mp3_files( @@ -141,20 +156,17 @@ def test_downloading_mocked_mp3_files( mp3_file1_mock: bytes, mp3_file2_mock: bytes, tmp_path: Path, + lep_dl: LepDL, ) -> None: """It downloads file on disc.""" - test_downloads: List[Tuple[str, List[str]]] = [] - file_1 = ( - "Test File #1", - [ - "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3" # noqa: E501,B950 - ], + test_downloads: LepFileList = LepFileList() + file_1 = LepFile( + filename="Test File #1.mp3", + primary_url="https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 ) - file_2 = ( - "Test File #2", - [ - "https://audioboom.com/posts/5678762-episode-169-luke-back-on-zep-part-4.mp3" # noqa: E501,B950 - ], + file_2 = LepFile( + filename="Test File #2.mp3", + primary_url="https://audioboom.com/posts/5678762-episode-169-luke-back-on-zep-part-4.mp3", # noqa: E501,B950 ) test_downloads.append(file_1) test_downloads.append(file_2) @@ -168,53 +180,15 @@ def test_downloading_mocked_mp3_files( content=mp3_file2_mock, ) - downloader.download_files(test_downloads, tmp_path) + lep_dl.non_existed = test_downloads + lep_dl.download_files(tmp_path) expected_file_1 = tmp_path / "Test File #1.mp3" expected_file_2 = tmp_path / "Test File #2.mp3" assert expected_file_1.exists() assert 21460 < expected_file_1.stat().st_size < 22000 assert expected_file_2.exists() assert 18300 < expected_file_2.stat().st_size < 18350 - assert len(downloader.successful_downloaded) == 2 - - -def test_skipping_downloaded_url( - requests_mock: rm_Mocker, - mp3_file1_mock: bytes, - mp3_file2_mock: bytes, - tmp_path: Path, -) -> None: - """It skips URL if it was downloaded before.""" - test_downloads: List[Tuple[str, List[str]]] = [] - file_1 = ( - "Test File #1", - [ - "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3" # noqa: E501,B950 - ], - ) - file_2 = ( - "Test File #2", - [ - "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3" # noqa: E501,B950 - ], - ) - test_downloads.append(file_1) - test_downloads.append(file_2) - - requests_mock.get( - "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3", # noqa: E501,B950 - content=mp3_file1_mock, - ) - requests_mock.get( - "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3", # noqa: E501,B950 - content=mp3_file2_mock, - ) - - downloader.download_files(test_downloads, tmp_path) - expected_file_1 = tmp_path / "Test File #1.mp3" - assert expected_file_1.exists() - assert len(list(tmp_path.iterdir())) == 1 - assert len(downloader.duplicated_links) == 1 + assert len(lep_dl.downloaded) == 2 def test_skipping_downloaded_file_on_disc( @@ -222,22 +196,19 @@ def test_skipping_downloaded_file_on_disc( mp3_file1_mock: bytes, mp3_file2_mock: bytes, tmp_path: Path, + lep_dl: LepDL, ) -> None: """It skips (and does not override) URL if file was downloaded before.""" - downloader.successful_downloaded = {} # Clear from previous tests - test_downloads: List[Tuple[str, List[str]]] = [] - file_1 = ( - "Test File #1", - [ - "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3" # noqa: E501,B950 - ], + test_downloads: LepFileList = LepFileList() + file_1 = LepFile( + filename="Test File #1.mp3", + primary_url="http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3", # noqa: E501,B950 ) - file_2 = ( - "Test File #2", - [ - "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3" # noqa: E501,B950 - ], + file_2 = LepFile( + filename="Test File #2.mp3", + primary_url="https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 ) + test_downloads.append(file_1) test_downloads.append(file_2) @@ -250,31 +221,31 @@ def test_skipping_downloaded_file_on_disc( content=mp3_file2_mock, ) + lep_dl.files = test_downloads + lep_dl.detach_existed_files(tmp_path) existing_file_1 = tmp_path / "Test File #1.mp3" existing_file_1.write_text("Here are mp3 1 bytes") - downloader.download_files(test_downloads, tmp_path) + lep_dl.download_files(tmp_path) expected_file_2 = tmp_path / "Test File #2.mp3" assert existing_file_1.read_text() == "Here are mp3 1 bytes" assert expected_file_2.exists() assert len(list(tmp_path.iterdir())) == 2 - assert len(downloader.already_on_disc) == 1 + assert len(lep_dl.existed) == 1 def test_try_auxiliary_download_links( requests_mock: rm_Mocker, mp3_file1_mock: bytes, tmp_path: Path, + lep_dl: LepDL, ) -> None: """It downloads file by auxiliary link.""" - downloader.successful_downloaded = {} # Clear from previous tests - test_downloads: List[Tuple[str, List[str]]] = [] - file_1 = ( - "Test File #1", - [ - "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 - "https://hotenov.com/d/lep/some_auxiliary_1.mp3", - "https://hotenov.com/d/lep/some_auxiliary_2.mp3", - ], + test_downloads: LepFileList = LepFileList() + file_1 = LepFile( + filename="Test File #1.mp3", + primary_url="https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 + secondary_url="https://hotenov.com/d/lep/some_auxiliary_1.mp3", + tertiary_url="https://hotenov.com/d/lep/some_auxiliary_2.mp3", ) test_downloads.append(file_1) @@ -293,27 +264,26 @@ def test_try_auxiliary_download_links( content=mp3_file1_mock, ) - downloader.download_files(test_downloads, tmp_path) + lep_dl.files = test_downloads + lep_dl.detach_existed_files(tmp_path) + lep_dl.download_files(tmp_path) expected_file_1 = tmp_path / "Test File #1.mp3" assert expected_file_1.exists() assert len(list(tmp_path.iterdir())) == 1 - assert len(downloader.successful_downloaded) == 1 + assert len(lep_dl.downloaded) == 1 def test_primary_link_unavailable( requests_mock: rm_Mocker, tmp_path: Path, capsys: CaptureFixture[str], + lep_dl: LepDL, ) -> None: """It records unavailable file and prints about that.""" - downloader.successful_downloaded = {} # Clear from previous tests - downloader.unavailable_links = {} - test_downloads: List[Tuple[str, List[str]]] = [] - file_1 = ( - "Test File #1", - [ - "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 - ], + test_downloads: LepFileList = LepFileList() + file_1 = LepFile( + filename="Test File #1.mp3", + primary_url="https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 ) test_downloads.append(file_1) @@ -322,11 +292,13 @@ def test_primary_link_unavailable( exc=Exception("Something wrong!"), ) - downloader.download_files(test_downloads, tmp_path) + lep_dl.files = test_downloads + lep_dl.detach_existed_files(tmp_path) + lep_dl.download_files(tmp_path) captured = capsys.readouterr() assert len(list(tmp_path.iterdir())) == 0 - assert len(downloader.successful_downloaded) == 0 - assert len(downloader.unavailable_links) == 1 + assert len(lep_dl.downloaded) == 0 + assert len(lep_dl.not_found) == 1 assert "[ERROR]: Unknown error:" in captured.out assert "Something wrong!" in captured.out assert "[INFO]: Can't download:" in captured.out @@ -337,18 +309,16 @@ def test_both_primary_and_auxiliary_links_404( requests_mock: rm_Mocker, tmp_path: Path, capsys: CaptureFixture[str], + lep_dl: LepDL, ) -> None: """It records unavailable files and prints about that.""" - downloader.successful_downloaded = {} # Clear from previous tests - downloader.unavailable_links = {} - test_downloads: List[Tuple[str, List[str]]] = [] - file_1 = ( - "Test File #1", - [ - "https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 - "https://hotenov.com/d/lep/some_auxiliary_1.mp3", - ], + test_downloads: LepFileList = LepFileList() + file_1 = LepFile( + filename="Test File #1.mp3", + primary_url="https://traffic.libsyn.com/secure/teacherluke/733._A_Summer_Ramble.mp3", # noqa: E501,B950 + secondary_url="https://hotenov.com/d/lep/some_auxiliary_1.mp3", ) + test_downloads.append(file_1) requests_mock.get( @@ -362,10 +332,317 @@ def test_both_primary_and_auxiliary_links_404( status_code=404, ) - downloader.download_files(test_downloads, tmp_path) + lep_dl.files = test_downloads + lep_dl.detach_existed_files(tmp_path, lep_dl.files) + lep_dl.download_files(tmp_path) captured = capsys.readouterr() assert len(list(tmp_path.iterdir())) == 0 - assert len(downloader.successful_downloaded) == 0 - assert len(downloader.unavailable_links) == 1 + assert len(lep_dl.downloaded) == 0 + assert len(lep_dl.not_found) == 1 assert "[INFO]: Can't download:" in captured.out assert "Test File #1.mp3" in captured.out + + +def test_gathering_audio_files( + requests_mock: rm_Mocker, + json_db_mock: str, + lep_dl: LepDL, +) -> None: + """It gets all audio files from mocked episodes.""" + requests_mock.get( + conf.JSON_DB_URL, + text=json_db_mock, + ) + lep_dl.use_or_get_db_episodes() + lep_dl.files = downloader.gather_all_files(lep_dl.db_episodes) + audio_files = lep_dl.files.filter_by_type(Audio) + assert len(audio_files) == 18 + + +def test_collecting_auxiliary_audio_links( + lep_dl: LepDL, +) -> None: + """It collects secondary and tertiary links as well.""" + json_test = """\ + [ + { + "episode": 3, + "date": "2000-01-01T00:00:00+00:00", + "url": "https://teacherluke.co.uk/2009/04/15/episode-3-musicthe-beatles/", + "post_title": "3. Music/The Beatles", + "post_type": "", + "files": { + "audios": [ + [ + "https://someurl1.local", "https://someurl2.local", "https://someurl3.local" + ], + [ + "https://part2-someurl1.local", "https://part2-someurl2.local" + ] + ], + "page_pdf": [] + }, + "parsed_at": "2021-10-14T07:35:24.575575Z", + "index": 2009041501, + "admin_note": "Edge case - null in 'audios'" + } + ] + """ # noqa: E501,B950 + db_episodes = Lep.extract_only_valid_episodes(json_test) + lep_dl.files = downloader.gather_all_files(db_episodes) + assert len(lep_dl.files) == 3 + assert lep_dl.files[0].secondary_url == "https://someurl2.local" + assert lep_dl.files[0].tertiary_url == "https://someurl3.local" + assert lep_dl.files[1].secondary_url == "https://part2-someurl2.local" + + +def test_using_db_episodes_after_parsing( + lep_dl: LepDL, +) -> None: + """It uses database episodes retrieved during parsing stage.""" + ep_1 = LepEpisode() + ep_1.index = 2022011101 + ep_1.episode = 888 + ep_1.post_title = "888. Some title." + ep_1._short_date = "2022-01-11" + ep_1.post_type = "AUDIO" + ep_1.files = { + "audios": [ + [ + "https://someurl1.local", + "https://someurl2.local", + "https://someurl3.local", + ] + ], + "page_pdf": [], + } + lep_dl.db_episodes.append(ep_1) + lep_dl.use_or_get_db_episodes() + lep_dl.files = downloader.gather_all_files(lep_dl.db_episodes) + assert len(lep_dl.files) == 2 # + 1 PDF file + assert lep_dl.files[0].primary_url == "https://someurl1.local" + assert lep_dl.files[0].filename == "[2022-01-11] # 888. Some title..mp3" + + +def test_no_valid_episodes_in_database( + requests_mock: rm_Mocker, + lep_dl: LepDL, +) -> None: + """It raises exception if there are no valid episodes in JSON file.""" + json_test = """\ + [ + { + "episode_number": 666, + "date": "2000-01-01T00:00:00+00:00", + "url": "https://teacherluke.co.uk/2009/04/15/episode-3-musicthe-beatles/", + } + ] + """ # noqa: E501,B950 + requests_mock.get( + conf.JSON_DB_URL, + text=json_test, + ) + lep_dl.use_or_get_db_episodes() + lep_dl.files = downloader.gather_all_files(lep_dl.db_episodes) + assert len(lep_dl.files) == 0 + # assert "No episodes for gathering files. Exit." in ex.value.args[0] + + +def test_populating_secondary_url( + lep_dl: LepDL, +) -> None: + """It populates secondary links for empty values.""" + json_test = """\ + [ + { + "episode": 3, + "date": "2000-01-01T00:00:00+00:00", + "url": "https://teacherluke.co.uk/2009/04/15/episode-3-musicthe-beatles/", + "post_title": "3. Music/The Beatles", + "post_type": "", + "files": { + "audios": [ + [ + "https://someurl1.local", "", "https://someurl3.local" + ], + [ + "https://part2-someurl1.local", "https://part2-someurl2.local" + ] + ], + "page_pdf": [] + }, + "parsed_at": "2021-10-14T07:35:24.575575Z", + "index": 2009041501, + "admin_note": "" + }, + { + "episode": 135, + "date": "2013-06-17T00:00:00+00:00", + "url": "https://teacherluke.co.uk/2013/06/17/episode-3-musicthe-beatles/", + "post_title": "135. Raining Animals", + "post_type": "", + "files": { + "audios": [ + [ + "https://someurl1.local135" + ] + ], + "page_pdf": [] + }, + "parsed_at": "2022-01-12T13:50:24.575575Z", + "index": 2009041501, + "admin_note": "default url for PDF" + } + ] + """ # noqa: E501,B950 + db_episodes = Lep.extract_only_valid_episodes(json_test) + lep_dl.files = downloader.gather_all_files(db_episodes) + lep_dl.populate_default_url() + assert len(lep_dl.files) == 5 + assert ( + lep_dl.files[0].secondary_url + == "https://hotenov.com/d/lep/%5B2013-06-17%5D%20%23%20135.%20Raining%C2%A0Animals.mp3" # noqa: E501,B950 + ) + assert ( + lep_dl.files[2].secondary_url + == "https://hotenov.com/d/lep/%5B2000-01-01%5D%20%23%203.%20Music/The%20Beatles%20%5BPart%2001%5D.mp3" # noqa: E501,B950 + ) + assert lep_dl.files[2].tertiary_url == "https://someurl3.local" + assert lep_dl.files[3].secondary_url == "https://part2-someurl2.local" + + +def test_gathering_page_pdf_urls( + lep_dl: LepDL, +) -> None: + """It gatheres pdf links if they are provided in JSON.""" + json_test = """\ + [ + { + "episode": 555, + "files": { + "audios": [], + "page_pdf": ["https://someurl555.local"] + }, + "index": 2022011303 + }, + { + "episode": 554, + "files": { + "audios": [], + "page_pdf": ["https://someurl554.local1", "https://someurl554.local2"] + }, + "index": 2022011302 + }, + { + "episode": 553, + "files": { + "audios": [], + "page_pdf": [ + "https://someurl553.local1", + "https://someurl553.local2", + "https://someurl553.local3" + ] + }, + "index": 2022011302 + } + ] + """ # noqa: E501,B950 + db_episodes = Lep.extract_only_valid_episodes(json_test) + lep_dl.files = downloader.gather_all_files(db_episodes) + + assert len(lep_dl.files) == 3 + + assert lep_dl.files[0].primary_url == "https://someurl553.local1" + assert lep_dl.files[0].secondary_url == "https://someurl553.local2" + assert lep_dl.files[0].tertiary_url == "https://someurl553.local3" + + assert lep_dl.files[1].primary_url == "https://someurl554.local1" + assert lep_dl.files[1].secondary_url == "https://someurl554.local2" + + assert lep_dl.files[2].primary_url == "https://someurl555.local" + assert lep_dl.files[2].secondary_url == "" + + +def test_gathering_links_for_audio_track( + lep_dl: LepDL, +) -> None: + """It collects URLs for audio track.""" + json_test = """\ + [ + { + "episode": 3, + "date": "2000-01-01T00:00:00+00:00", + "url": "https://teacherluke.co.uk/2009/04/15/episode-3-musicthe-beatles/", + "post_title": "3. Music/The Beatles", + "post_type": "", + "files": { + "audios": [], + "atrack": [ + [ + "https://someurl1.local", "https://someurl2.local", "https://someurl3.local" + ] + ] + }, + "parsed_at": "2021-10-14T07:35:24.575575Z", + "index": 2009041501, + "admin_note": "Check audio track." + } + ] + """ # noqa: E501,B950 + db_episodes = Lep.extract_only_valid_episodes(json_test) + lep_dl.files = downloader.gather_all_files(db_episodes) + assert len(lep_dl.files) == 2 + assert lep_dl.files[0].primary_url == "https://someurl1.local" + assert lep_dl.files[0].secondary_url == "https://someurl2.local" + assert lep_dl.files[0].tertiary_url == "https://someurl3.local" + assert isinstance(lep_dl.files[0], ATrack) + assert ( + lep_dl.files[0].filename == "[2000-01-01] # 3. Music/The Beatles _aTrack_.mp3" + ) + + +def test_gathering_multi_part_audio_track( + lep_dl: LepDL, +) -> None: + """It collects multi-part audio track.""" + json_test = """\ + [ + { + "episode": 3, + "date": "2000-01-01T00:00:00+00:00", + "url": "https://teacherluke.co.uk/2009/04/15/episode-3-musicthe-beatles/", + "post_title": "3. Music/The Beatles", + "post_type": "", + "files": { + "audios": [], + "atrack": [ + [ + "https://someurl1.local", "https://someurl2.local", "https://someurl3.local" + ], + [ + "https://part2-someurl1.local", "https://part2-someurl2.local" + ] + ] + }, + "parsed_at": "2021-10-14T07:35:24.575575Z", + "index": 2009041501, + "admin_note": "Check audio track." + } + ] + """ # noqa: E501,B950 + db_episodes = Lep.extract_only_valid_episodes(json_test) + lep_dl.files = downloader.gather_all_files(db_episodes) + assert len(lep_dl.files) == 3 + assert lep_dl.files[0].secondary_url == "https://someurl2.local" + assert lep_dl.files[0].tertiary_url == "https://someurl3.local" + assert lep_dl.files[1].secondary_url == "https://part2-someurl2.local" + assert isinstance(lep_dl.files[0], ATrack) + assert isinstance(lep_dl.files[1], ATrack) + assert ( + lep_dl.files[0].filename + == "[2000-01-01] # 3. Music/The Beatles [Part 01] _aTrack_.mp3" + ) + assert ( + lep_dl.files[1].filename + == "[2000-01-01] # 3. Music/The Beatles [Part 02] _aTrack_.mp3" + ) diff --git a/tests/test_parser.py b/tests/test_parser.py index 5b0bd9a..3b67751 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -20,13 +20,16 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """Test cases for the parser module.""" +import copy import json -import typing as t +from datetime import datetime +from datetime import timedelta +from datetime import timezone from pathlib import Path from typing import Callable +from typing import Dict from typing import List from typing import Optional -from typing import Tuple import pytest import requests @@ -39,9 +42,15 @@ from lep_downloader import config as conf from lep_downloader import lep from lep_downloader import parser -from lep_downloader.data_getter import get_web_page_html_text +from lep_downloader.exceptions import DataBaseUnavailable +from lep_downloader.exceptions import NoEpisodeLinksError +from lep_downloader.exceptions import NoEpisodesInDataBase +from lep_downloader.exceptions import NotEpisodeURLError from lep_downloader.lep import as_lep_episode_obj +from lep_downloader.lep import Lep from lep_downloader.lep import LepEpisode +from lep_downloader.lep import LepEpisodeList +from lep_downloader.parser import Archive lep_date_format = "%Y-%m-%dT%H:%M:%S%z" @@ -53,7 +62,7 @@ def test_getting_success_page_response( ) -> None: """It gets HTML content as text.""" requests_mock.get(req_mock.ANY, text="Response OK") - resp = get_web_page_html_text(conf.ARCHIVE_URL, req_ses)[0] + resp = Lep.get_web_document(conf.ARCHIVE_URL, req_ses)[0] assert resp == "Response OK" @@ -63,7 +72,7 @@ def test_getting_404_page_response( ) -> None: """It handles HTTPError if page is not found.""" requests_mock.get(req_mock.ANY, text="Response OK", status_code=404) - resp = get_web_page_html_text("http://example.com", req_ses)[0] + resp = Lep.get_web_document("http://example.com", req_ses)[0] assert "[ERROR]" in resp assert "404" in resp @@ -74,7 +83,7 @@ def test_getting_503_page_response( ) -> None: """It handle HTTPError if service is unavailable.""" requests_mock.get(req_mock.ANY, text="Response OK", status_code=503) - resp = get_web_page_html_text("http://example.com", req_ses)[0] + resp = Lep.get_web_document("http://example.com", req_ses)[0] assert "[ERROR]" in resp assert "503" in resp @@ -85,7 +94,7 @@ def test_timeout_error( ) -> None: """It handle any Timeout exception for page.""" requests_mock.get(req_mock.ANY, exc=requests.exceptions.Timeout) - resp = get_web_page_html_text("http://example.com", req_ses)[0] + resp = Lep.get_web_document("http://example.com", req_ses)[0] assert "[ERROR]" in resp assert "Timeout" in resp @@ -96,7 +105,7 @@ def test_connection_error( ) -> None: """It handles ConnectionError exception for bad request.""" requests_mock.get(req_mock.ANY, exc=requests.exceptions.ConnectionError) - resp = get_web_page_html_text("http://example.com", req_ses)[0] + resp = Lep.get_web_document("http://example.com", req_ses)[0] assert "[ERROR]" in resp assert "Bad request" in resp @@ -107,7 +116,7 @@ def test_unknown_error( ) -> None: """It handles any other exceptions during getting response from URL.""" requests_mock.get(req_mock.ANY, exc=Exception("Something Bad")) - resp = get_web_page_html_text("http://example.com", req_ses)[0] + resp = Lep.get_web_document("http://example.com", req_ses)[0] assert "[ERROR]" in resp assert "Unhandled error" in resp @@ -124,7 +133,7 @@ def test_final_location_for_good_redirect( headers={"Location": "https://final.location/"}, ) requests_mock.get("https://final.location", text="Final location") - text, final_location, is_url_ok = get_web_page_html_text( + text, final_location, is_url_ok = Lep.get_web_document( "https://re.direct", req_ses, ) @@ -149,7 +158,7 @@ def test_final_location_for_bad_redirect( text="Final location", status_code=404, ) - text, final_location, is_url_ok = get_web_page_html_text( + text, final_location, is_url_ok = Lep.get_web_document( "https://re.direct", req_ses, ) @@ -159,7 +168,9 @@ def test_final_location_for_bad_redirect( assert final_location == "https://bad.final.location/" -def test_retrieve_all_episode_links_from_soup() -> None: +def test_retrieve_all_episode_links_from_soup( + archive: Archive, +) -> None: """It returns only <a> tags from soup object.""" html_doc = """<html><head><title>The Dormouse'req_ses story
@@ -177,13 +188,20 @@ def test_retrieve_all_episode_links_from_soup() -> None:

...

""" # noqa: E501,B950 soup = BeautifulSoup(html_doc, "lxml") - only_links, only_strings = parser.get_all_episode_links_from_soup(soup) - assert len(only_links) == 2 - assert len(only_strings) == 2 + archive_parser = archive.parser + archive_parser.soup = soup + archive_parser.collect_links() + assert len(archive.collected_links) == 2 + assert ( + list(archive.collected_links.values())[1] + == "723. Bahar from Iran (WISBOLEP Runner-Up)" + ) -def test_replacing_misspelled_link() -> None: - """It replaces misspelled link and returns modified soup object.""" +def test_replacing_misspelled_link( + archive: Archive, +) -> None: + """It replaces misspelled link in archive HTML content.""" html_doc = """The Dormouse'req_ses story

Once upon a time there were three little sisters; and their names were @@ -193,14 +211,22 @@ def test_replacing_misspelled_link() -> None: and they lived at the bottom of a well.

""" # noqa: E501,B950 - soup = BeautifulSoup(html_doc, "lxml") - modified_soup = parser.replace_misspelled_link(soup) - new_href = modified_soup("a")[1]["href"] + + archive_parser = archive.parser + archive_parser.content = html_doc + content_before = copy.copy(archive_parser.content) + archive_parser.do_pre_parsing() + content_after = archive_parser.content + soup = BeautifulSoup(content_after, "lxml") + new_href = soup("a")[1]["href"] expected = "https://teacherluke.co.uk/2012/08/06/london-olympics-2012/" assert new_href == expected + assert content_before != content_after -def test_replacing_nothing_when_no_misspelled_link() -> None: +def test_replacing_nothing_when_no_misspelled_link( + archive: Archive, +) -> None: """It replaces nothing when there is no misspelled link.""" html_doc = """The Dormouse'req_ses story @@ -211,71 +237,105 @@ def test_replacing_nothing_when_no_misspelled_link() -> None: and they lived at the bottom of a well.

""" # noqa: E501,B950 - soup = BeautifulSoup(html_doc, "lxml") - modified_soup = parser.replace_misspelled_link(soup) - assert soup == modified_soup + archive_parser = archive.parser + archive_parser.content = html_doc + content_before = copy.copy(archive_parser.content) + archive_parser.do_pre_parsing() + content_after = archive_parser.content + assert content_before == content_after -def test_removing_irrelevant_links() -> None: +def test_removing_irrelevant_links( + archive: Archive, +) -> None: """It removes known (from config list) irrelevant links.""" - test_list: t.List[str] = [ + test_links: List[str] = [ "https://teacherluke.co.uk/2020/11/23/wisbolep/", "https://wp.me/P4IuUx-82H", # <- Link to app "https://teacherluke.co.uk/2014/04/01/177-what-londoners-say-vs-what-they-mean/", # noqa: E501,B950 "https://teacherluke.co.uk/2021/03/26/711-william-from-france-%f0%9f%87%ab%f0%9f%87%b7-wisbolep-runner-up/", # noqa: E501,B950 ] - test_texts: t.List[str] = [ + test_texts: List[str] = [ "1. Link", "Link to App (irrelevant)", "2. Link", "3. Link", ] - new_list, new_texts = parser.remove_irrelevant_links(test_list, test_texts) - assert len(new_list) == len(new_texts) - assert "Link to App (irrelevant)" not in new_texts - - -def test_short_links_substitution() -> None: + test_dct = dict(zip(test_links, test_texts)) + archive_parser = archive.parser + archive.collected_links = test_dct + archive_parser.remove_irrelevant_links() + assert len(archive.collected_links) == 3 + assert len(archive.deleted_links) == 1 + assert "https://wp.me/P4IuUx-82H" in archive.deleted_links + assert list(archive.collected_links.values())[1] == "2. Link" + + +def test_short_links_substitution( + archive: Archive, +) -> None: """It replaces short links with links from config dictionary.""" - test_list: t.List[str] = [ - "http://wp.me/p4IuUx-7sg", - "https://wp.me/P4IuUx-82H", # <- Link to app (no replacing) + test_links: List[str] = [ + "http://wp.me/p4IuUx-7sg", # <- Short link (replacing) + "https://wp.me/P4IuUx-82H", # <- Link to app (NO replacing) "https://teacherluke.co.uk/2014/04/01/177-what-londoners-say-vs-what-they-mean/", # noqa: E501,B950 - "https://wp.me/p4IuUx-29", + "https://wp.me/p4IuUx-29", # <- Short link (replacing) ] - replaced: t.List[str] = parser.substitute_short_links(test_list) - expected: t.List[str] = [ - "https://teacherluke.co.uk/2017/01/10/415-with-the-family-part-3-more-encounters-with-famous-people/", # noqa: E501,B950 - "https://wp.me/P4IuUx-82H", - "https://teacherluke.co.uk/2014/04/01/177-what-londoners-say-vs-what-they-mean/", # noqa: E501,B950 - "https://teacherluke.co.uk/2011/10/11/notting-hill-carnival-video-frustration-out-takes/", # noqa: E501,B950 + test_texts: List[str] = [ + "1. Substitution 1", + "Link to App (irrelevant)", + "2. Link", + "3. Substitution 2", ] - assert replaced == expected + test_dct = dict(zip(test_links, test_texts)) + archive_parser = archive.parser + archive.collected_links = test_dct + archive_parser.substitute_short_links() + assert len(archive.collected_links) == 4 + assert len(archive.deleted_links) == 0 + assert "https://wp.me/P4IuUx-82H" in archive.collected_links + assert ( + list(archive.collected_links)[0] + == "https://teacherluke.co.uk/2017/01/10/415-with-the-family-part-3-more-encounters-with-famous-people/" # noqa: E501,B950 + ) + assert list(archive.collected_links.values())[0] == "1. Substitution 1" + assert ( + list(archive.collected_links)[3] + == "https://teacherluke.co.uk/2011/10/11/notting-hill-carnival-video-frustration-out-takes/" # noqa: E501,B950 + ) + assert list(archive.collected_links.values())[3] == "3. Substitution 2" def test_parsing_posts_from_archive_page( - archive_parsing_results_mock: Tuple[List[str], List[str]], - mocked_urls: List[str], + archive_parsing_results_mock: Dict[str, str], ) -> None: """It parses links and texts from mocked archived page.""" - all_links, all_texts = archive_parsing_results_mock - assert len(all_links) == len(all_texts) - assert len(all_links) > 781 - assert "/2009/04/12/episode-1-introduction" in all_links[-1] + assert len(archive_parsing_results_mock) == 782 + assert ( + "/2009/04/12/episode-1-introduction" in list(archive_parsing_results_mock)[-1] + ) # Intersection of mocked pages and all links - intersection = set(mocked_urls) & set(all_links) - assert len(intersection) > 15 + # intersection = set(mocked_urls) & set(all_links) + # assert len(intersection) > 15 -def test_parsing_invalid_html(requests_mock: rm_Mocker) -> None: +def test_parsing_invalid_html( + requests_mock: rm_Mocker, + archive: Archive, +) -> None: """It returns None if page does not comply with the parsing rules.""" markup: str = '
' requests_mock.get(conf.ARCHIVE_URL, text=markup) - parsing_result = parser.get_archive_parsing_results(conf.ARCHIVE_URL) - assert parsing_result == (None, None, None) + with pytest.raises(NotEpisodeURLError) as ex: + archive.parser.parse_url() + assert conf.ARCHIVE_URL in ex.value.args[0] # Trailing slash for domain URL + assert ( + ex.value.args[1] + == "[ERROR]: Can't parse this page:
tag was not found." + ) -def test_parsing_archive_without_episodes() -> None: +def test_parsing_archive_without_episodes(archive: Archive) -> None: """It collects links only matched by episode link pattern.""" markup = """The Dormouse'req_ses story
@@ -286,29 +346,67 @@ def test_parsing_archive_without_episodes() -> None:

...

""" # noqa: E501,B950 soup = BeautifulSoup(markup, "lxml") - links, texts = parser.get_all_episode_links_from_soup(soup) - assert len(links) == 0 - assert len(texts) == 0 + archive_parser = archive.parser + archive_parser.soup = soup + with pytest.raises(NoEpisodeLinksError) as ex: + archive_parser.collect_links() + assert len(archive.collected_links) == 0 + assert ex.value.args[0] == conf.ARCHIVE_URL + assert ex.value.args[1] == "[ERROR]: No episode links on archive page" -def test_parsing_archive_with_known_duplicates() -> None: +def test_parsing_archive_with_known_duplicates( + archive: Archive, +) -> None: """It ignores several links by their texts.""" markup = """Known Duplicates
[VIDEO]; episode 522; + 522. Learning English at Summer School in the UK (A Rambling Chat with Raphael Miller) [Website content]; """ # noqa: E501,B950 soup = BeautifulSoup(markup, "lxml") - links, texts = parser.get_all_episode_links_from_soup(soup) - assert len(links) == 0 - assert len(texts) == 0 + archive_parser = archive.parser + archive_parser.soup = soup + archive_parser.collect_links() + assert len(archive.collected_links) == 1 + assert ( + list(archive.collected_links.values())[0] + == "522. Learning English at Summer School in the UK (A Rambling Chat with Raphael Miller)" # noqa: E501,B950 + ) + + +def test_parsing_archive_with_only_duplicates( + archive: Archive, +) -> None: + """It does not fail when there are only duplicated links on page.""" + markup = """Known Duplicates + [VIDEO]; + episode 522; + [Website content]; + """ # noqa: E501,B950 + soup = BeautifulSoup(markup, "lxml") + archive_parser = archive.parser + archive_parser.soup = soup + archive_parser.collect_links() + assert len(archive.collected_links) == 0 + archive_parser.remove_irrelevant_links() + assert len(archive.collected_links) == 0 + archive_parser.substitute_short_links() + assert len(archive.collected_links) == 0 def test_parsing_all_episodes_from_mocked_archive( - parsed_episodes_mock: List[lep.LepEpisode], + parsed_episodes_mock: LepEpisodeList, ) -> None: """It parses all episodes from mocked archive HTML.""" - assert len(parsed_episodes_mock) == 786 + # SAVING MOCKED JSON DB # # + # sorted_eps = parsed_episodes_mock.desc_sort_by_date_and_index() + # parser.write_parsed_episodes_to_json(sorted_eps) + # SAVING MOCKED JSON DB # # + + # assert len(parsed_episodes_mock) == 786 + assert len(parsed_episodes_mock) == 782 # Without duplicates def test_parsing_post_datetime() -> None: @@ -335,29 +433,33 @@ def test_parsing_post_datetime_without_element() -> None: assert post_date == excepted -def test_generating_new_post_index() -> None: +def test_generating_new_post_index( + archive: Archive, +) -> None: """It generates index from URL.""" - indexes: t.List[int] = [] test_url = "https://teacherluke.co.uk/2009/04/12/episode-1-introduction/" - index = parser.generate_post_index(test_url, indexes) - expected_index = int("2009041201") + index = parser.generate_post_index(test_url, archive.used_indexes) + expected_index = 2009041201 assert index == expected_index -def test_generating_new_post_index_on_same_day() -> None: +def test_generating_new_post_index_on_same_day( + archive: Archive, +) -> None: """It generates index from URL if posts are on the same day.""" - indexes: t.List[int] = [2009041201] + archive.used_indexes.add(2009041201) test_url = "https://teacherluke.co.uk/2009/04/12/episode-1-introduction/" - index = parser.generate_post_index(test_url, indexes) - expected_index = int("2009041202") + index = parser.generate_post_index(test_url, archive.used_indexes) + expected_index = 2009041202 assert index == expected_index - index2 = parser.generate_post_index(test_url, indexes) + index2 = parser.generate_post_index(test_url, archive.used_indexes) assert index2 == expected_index + 1 def test_parsing_non_episode_link( requests_mock: rm_Mocker, req_ses: requests.Session, + archive: Archive, ) -> None: """It returns None (empty episode) for non-episode link.""" non_episode_url = ( @@ -369,15 +471,17 @@ def test_parsing_non_episode_link( status_code=200, ) link_title = "Some title" - episode = parser.parse_single_page(non_episode_url, req_ses, link_title) - assert episode is None + with pytest.raises(NotEpisodeURLError) as ex: + parser.EpisodeParser(archive, non_episode_url, req_ses, link_title).parse_url() + assert len(archive.collected_links) == 0 + assert ex.value.args[0] == non_episode_url def test_skipping_non_episode_link( requests_mock: rm_Mocker, single_page_matcher: Optional[Callable[[_RequestObjectProxy], bool]], single_page_mock: str, - req_ses: requests.Session, + archive: Archive, ) -> None: """It skips non-episode link.""" test_urls = [ @@ -398,25 +502,27 @@ def test_skipping_non_episode_link( text="No need to parse this page", status_code=200, ) - episodes = parser.get_parsed_episodes(test_urls, req_ses, test_texts) - assert len(episodes) == 1 - assert episodes[0].post_title == "Episode 1 Link" + test_dct = dict(zip(test_urls, test_texts)) + archive.parse_each_episode(test_dct) + assert len(archive.episodes) == 1 + assert archive.episodes[0].post_title == "Episode 1 Link" def test_parsing_links_to_audio_for_mocked_episodes( - mocked_episodes: List[lep.LepEpisode], + mocked_episodes: LepEpisodeList, ) -> None: """It parses links to audio (if they exist).""" - assert len(mocked_episodes) == 17 + # assert len(mocked_episodes) == 17 + assert len(mocked_episodes) == 16 # Now without duplicates assert mocked_episodes[3].episode == 35 - assert mocked_episodes[3].audios == [ + assert mocked_episodes[3].files["audios"] == [ [ "http://traffic.libsyn.com/teacherluke/36-london-video-interviews-pt-1-audio-only.mp3" # noqa: E501,B950 ] ] - assert mocked_episodes[12].audios == [] - if mocked_episodes[10].audios is not None: - assert len(mocked_episodes[10].audios) == 5 + assert mocked_episodes[11].files["audios"] == [] + if mocked_episodes[9].files["audios"] is not None: + assert len(mocked_episodes[9].files["audios"]) == 5 def test_no_appropriate_mp3_links_by_title() -> None: @@ -478,29 +584,43 @@ def test_appropriate_mp3_link_with_word_audio() -> None: def test_episodes_sorting_by_date() -> None: - """It sorts LepEpisodes by datetime then by episode number.""" - test_lep_ep_1 = LepEpisode( - episode=35, - date="2010-03-25T22:59:36+01:00", - index=2010032501, - ) - test_lep_ep_2 = LepEpisode( - episode=0, - date="2010-03-25T22:59:36+01:00", - index=2010032502, - ) + """It sorts LepEpisodes by datetime first.""" + test_lep_ep_1 = LepEpisode(episode=0, index=2010032502) + test_lep_ep_1.date = "2010-03-25T22:59:36+02:00" + test_lep_ep_2 = LepEpisode(episode=35, index=2010032501) + test_lep_ep_2.date = "2010-03-25T22:59:36+01:00" + assert test_lep_ep_1 < test_lep_ep_2 + test_lep_ep_3 = LepEpisode(episode=100) - episodes = [ - test_lep_ep_1, + + episodes = LepEpisodeList([test_lep_ep_1, test_lep_ep_2, test_lep_ep_3]) + expected_sorted = [ test_lep_ep_2, + test_lep_ep_1, test_lep_ep_3, ] + sorted_episodes = episodes.desc_sort_by_date_and_index() + assert sorted_episodes == expected_sorted + + +def test_episodes_sorting_by_date_and_index() -> None: + """It sorts LepEpisodes by datetime then by index number.""" + test_lep_ep_1 = LepEpisode(episode=35, index=2010032501) + test_lep_ep_1.date = "2021-12-24T22:22:22+02:00" + test_lep_ep_2 = LepEpisode(episode=0, index=2010032502) + test_lep_ep_2.date = "2021-12-24T22:22:22+02:00" + assert test_lep_ep_1 < test_lep_ep_2 + + test_lep_ep_3 = LepEpisode(episode=13, index=2010032503) + test_lep_ep_3.date = "2021-12-24T22:22:22+02:00" + + episodes = LepEpisodeList([test_lep_ep_1, test_lep_ep_2, test_lep_ep_3]) expected_sorted = [ + test_lep_ep_3, test_lep_ep_2, test_lep_ep_1, - test_lep_ep_3, ] - sorted_episodes = parser.sort_episodes_by_post_date(episodes) + sorted_episodes = episodes.desc_sort_by_date_and_index() assert sorted_episodes == expected_sorted @@ -512,12 +632,9 @@ def test_writing_lep_episodes_to_json(lep_temp_path: Path) -> None: index=2021012501, ) lep_ep_2 = LepEpisode(episode=2, post_title="2. Test episode #2") - episodes = [ - lep_ep_1, - lep_ep_2, - ] + episodes = LepEpisodeList([lep_ep_1, lep_ep_2]) - json_file = lep_temp_path / "json_db_tmp.json" + json_file = str(Path(lep_temp_path / "json_db_tmp.json").absolute()) parser.write_parsed_episodes_to_json(episodes, json_file) with open(json_file, "rb") as f: py_from_json = json.load(f) @@ -535,6 +652,7 @@ def test_no_new_episodes_on_archive_vs_json_db( single_page_mock: str, json_db_mock: str, capsys: CaptureFixture[str], + archive: Archive, ) -> None: """It prints when no new episodes on archive page.""" requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) @@ -548,7 +666,7 @@ def test_no_new_episodes_on_archive_vs_json_db( text=json_db_mock, ) - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) + archive.do_parsing_actions(conf.JSON_DB_URL) captured = capsys.readouterr() assert "There are no new episodes. Exit." in captured.out @@ -559,6 +677,7 @@ def test_no_valid_episode_objects_in_json_db( single_page_matcher: Optional[Callable[[_RequestObjectProxy], bool]], single_page_mock: str, capsys: CaptureFixture[str], + archive: Archive, ) -> None: """It prints warning when there are no valid episode objects.""" requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) @@ -574,10 +693,11 @@ def test_no_valid_episode_objects_in_json_db( text="[]", ) - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) + with pytest.raises(NoEpisodesInDataBase) as ex: + archive.do_parsing_actions(conf.JSON_DB_URL) + assert "there are NO episodes" in ex.value.args[0] captured = capsys.readouterr() - assert "[WARNING]" in captured.out assert "no valid episode objects" in captured.out @@ -588,6 +708,7 @@ def test_json_db_not_valid( single_page_matcher: Optional[Callable[[_RequestObjectProxy], bool]], single_page_mock: str, capsys: CaptureFixture[str], + archive: Archive, ) -> None: """It prints error for invalid JSON document.""" requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) @@ -601,7 +722,9 @@ def test_json_db_not_valid( text="", ) - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) + with pytest.raises(NoEpisodesInDataBase) as ex: + archive.do_parsing_actions(conf.JSON_DB_URL) + assert "there are NO episodes" in ex.value.args[0] captured = capsys.readouterr() assert "[ERROR]" in captured.out assert "Data is not a valid JSON document." in captured.out @@ -612,7 +735,8 @@ def test_json_db_not_available( archive_page_mock: str, single_page_matcher: Optional[Callable[[_RequestObjectProxy], bool]], single_page_mock: str, - capsys: CaptureFixture[str], + archive: Archive, + # capsys: CaptureFixture[str], ) -> None: """It prints error for unavailable JSON database.""" requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) @@ -627,9 +751,11 @@ def test_json_db_not_available( status_code=404, ) - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) - captured = capsys.readouterr() - assert "JSON database is not available. Exit." in captured.out + with pytest.raises(DataBaseUnavailable): + archive.do_parsing_actions(conf.JSON_DB_URL) + # assert "" in ex.value.args[0] + # captured = capsys.readouterr() + # assert "JSON database is not available. Exit." in captured.out def test_json_db_contains_only_string( @@ -638,6 +764,7 @@ def test_json_db_contains_only_string( single_page_matcher: Optional[Callable[[_RequestObjectProxy], bool]], single_page_mock: str, capsys: CaptureFixture[str], + archive: Archive, ) -> None: """It prints warning for JSON as str.""" requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) @@ -651,7 +778,9 @@ def test_json_db_contains_only_string( text='"episode"', ) - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) + with pytest.raises(NoEpisodesInDataBase) as ex: + archive.do_parsing_actions(conf.JSON_DB_URL) + assert "there are NO episodes" in ex.value.args[0] captured = capsys.readouterr() assert "[WARNING]" in captured.out assert "no valid episode objects" in captured.out @@ -663,6 +792,7 @@ def test_invalid_objects_in_json_not_included( single_page_matcher: Optional[Callable[[_RequestObjectProxy], bool]], single_page_mock: str, capsys: CaptureFixture[str], + archive: Archive, ) -> None: """It skips invalid objects in JSON database.""" requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) @@ -676,7 +806,9 @@ def test_invalid_objects_in_json_not_included( text='[{"episode": 1, "fake_key": "Skip me"}]', ) - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) + with pytest.raises(NoEpisodesInDataBase) as ex: + archive.do_parsing_actions(conf.JSON_DB_URL) + assert "there are NO episodes" in ex.value.args[0] captured = capsys.readouterr() assert "[WARNING]" in captured.out assert "no valid episode objects" in captured.out @@ -689,6 +821,7 @@ def test_updating_json_database_with_new_episodes( single_page_mock: str, modified_json_less_db_mock: str, lep_temp_path: Path, + archive: Archive, ) -> None: """It retrives and saves new episodes from archive.""" requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) @@ -702,12 +835,21 @@ def test_updating_json_database_with_new_episodes( text=modified_json_less_db_mock, ) - json_file = lep_temp_path / "json_db_tmp.json" - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL, json_file) + # json_file = lep_temp_path / "json_db_tmp.json" + json_file = str(Path(lep_temp_path / "json_db_tmp.json").absolute()) + archive.do_parsing_actions(conf.JSON_DB_URL, json_name=json_file) with open(json_file, "rb") as f: - py_from_json = json.load(f, object_hook=as_lep_episode_obj) + py_from_json: LepEpisodeList = json.load(f, object_hook=as_lep_episode_obj) - assert len(py_from_json) == 786 + # CALCULATION: ! (for JSON v3.0.0a2 'without duplicates in JSON db') + # Initial total number of episodes = 782 + # In 'modified_json_less_db_mock' we deleted 3 episodes + # Two from top (latest) and one in the middle + # Last in db becomes # 711. In archive last # 733. + # Between them 24 episodes (updates) + # 24 + 782 - 3 = 803 + assert len(py_from_json) == 803 + # assert len(py_from_json) == 786 def test_updating_json_database_with_extra_episodes( @@ -717,6 +859,7 @@ def test_updating_json_database_with_extra_episodes( single_page_mock: str, modified_json_extra_db_mock: str, capsys: CaptureFixture[str], + archive: Archive, ) -> None: """It prints warning if database contains more episodes than archive.""" requests_mock.get(conf.ARCHIVE_URL, text=archive_page_mock) @@ -730,7 +873,7 @@ def test_updating_json_database_with_extra_episodes( text=modified_json_extra_db_mock, ) - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) + archive.do_parsing_actions(conf.JSON_DB_URL) captured = capsys.readouterr() expected_message = "Database contains more episodes than current archive!" assert "[WARNING]" in captured.out @@ -739,16 +882,18 @@ def test_updating_json_database_with_extra_episodes( def test_parsing_invalid_html_in_main_actions( requests_mock: rm_Mocker, - capsys: CaptureFixture[str], + archive: Archive, ) -> None: - """It prints error when no episode links on archive page.""" + """It raises error when ivalid DOM on archive page.""" markup: str = '' requests_mock.get(conf.ARCHIVE_URL, text=markup) - parser.do_parsing_actions(conf.JSON_DB_URL, conf.ARCHIVE_URL) - captured = capsys.readouterr() - expected_message = "Can't parse any episodes from archive page." - assert "[ERROR]" in captured.out - assert expected_message in captured.out + with pytest.raises(NotEpisodeURLError) as ex: + archive.do_parsing_actions(conf.JSON_DB_URL) + assert conf.ARCHIVE_URL in ex.value.args[0] + assert ( + ex.value.args[1] + == "[ERROR]: Can't parse this page:
tag was not found." + ) def test_encoding_non_serializable_json_object() -> None: @@ -756,3 +901,99 @@ def test_encoding_non_serializable_json_object() -> None: obj = [complex(2 + 1)] with pytest.raises(TypeError): _ = json.dumps(obj, cls=lep.LepJsonEncoder) + + +def test_invoking_not_implemented_methods( + archive: Archive, +) -> None: + """It raises exceptions if someone forget to override methods.""" + + class NewParser(parser.LepParser): + """Future new subclass.""" + + pass + + with pytest.raises(NotImplementedError): + NewParser(archive, "Some URL").do_pre_parsing() + with pytest.raises(NotImplementedError): + NewParser(archive, "Some URL").collect_links() + with pytest.raises(NotImplementedError): + NewParser(archive, "Some URL").do_post_parsing() + + +def test_extracting_date_from_url_negative() -> None: + """It returns empty string if URL does not contain valid date.""" + date = parser.extract_date_from_url( + "https://teacherluke.co.uk/200904/12/episode-1-introduction/" + ) + assert date == "" + + +def test_converting_invalid_date() -> None: + """It raises ValueError for invalid date format.""" + # TODO (hotenov): Add handling this exception in other functions. + with pytest.raises(ValueError) as ex: + _ = parser.convert_date_from_url("") + assert "does not match format '%Y/%m/%d'" in ex.value.args[0] + + +def test_replacing_chars_in_post_title() -> None: + """It replaces invalid path characters with "_".""" + ep = LepEpisode() + ep.post_title = r"999. [1/2]. Asterisk * and question mark ?" + assert ep.post_title == "999. [1_2]. Asterisk _ and question mark _" + assert ep._origin_post_title == "999. [1/2]. Asterisk * and question mark ?" + ep.post_title = r"Other invalid chars: [<>:\"/\\\\|?*]" + assert ep.post_title == "Other invalid chars_ [_____________]" + assert ep._origin_post_title == r"Other invalid chars: [<>:\"/\\\\|?*]" + + +def test_comparison_operators_for_episode_objects() -> None: + """It lets to compare two episode objects.""" + ep_1 = LepEpisode() + ep_1.date = "2021-12-24T22:22:22+02:00" + ep_2 = LepEpisode() + ep_2.date = "2021-12-24T20:33:22Z" + assert ep_1 < ep_2 # Because it converts to UTC + ep_3 = LepEpisode() + ep_3.date = "2021-12-24T22:22:22+02:00" + ep_3.index = 2021122401 + ep_4 = LepEpisode() + ep_4.date = "2021-12-24T22:22:22+02:00" + ep_4.index = 2021122401 + assert ep_3 == ep_4 + ep_4.index = 2021122402 + assert ep_3 != ep_4 + assert ep_3 < ep_4 + + +def test_episode_object_reprisentation() -> None: + """Check work of __repr__ method of LepEpisode object.""" + ep_1 = LepEpisode() + ep_1.index = 2021122403 + ep_1.episode = 777 + ep_1.post_title = "777. Some / good title more than sixteen chars." + obj_repr = repr(ep_1) + excepted_repr = "2021122403: 777:777. Some _ good" + assert obj_repr == excepted_repr + + +def test_setting_episode_date_as_datetime() -> None: + """It lets to pass datetime as episode date.""" + t_zone = timezone(timedelta(hours=3)) # GMT+03:00 + new_date = datetime(2021, 12, 24, 17, 18, 19, tzinfo=t_zone) + ep = LepEpisode(date=new_date) + as_str = ep.date.strftime(r"%Y-%m-%dT%H:%M:%S%z") + except_date = "2021-12-24T14:18:19+0000" + assert as_str == except_date + + +def test_parsing_html_title_for_mocked_episodes( + parsed_episodes_mock: LepEpisodeList, +) -> None: + """It parses HTML tag for each episode.""" + assert ( + parsed_episodes_mock[33]._title + == "36. London Video Interviews Pt.1 | Luke’s ENGLISH Podcast" + ) + assert parsed_episodes_mock[45]._title == "NO TITLE!"