Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KeyError for 'content-location' and 'link' when trying to save non-HTML #65

Open
Kirkman opened this issue Jul 31, 2024 · 13 comments
Open

Comments

@Kirkman
Copy link

Kirkman commented Jul 31, 2024

I'm trying to see if I can integrate savepagenow into my election night scraping system. The idea would be to save online results files into the Wayback Machine when my system detects the results have changed.

Most of the URLs I want to save are CSVs, JSON, or XML files. However, I am often finding that when I try to use savepagenow to save them, I get error tracebacks like these:

Traceback (most recent call last):
  File "/Users/xxxx/.virtualenvs/yyyyy/zzzzzzz/savepagenow/api.py", line 99, in capture
    content_location = response.headers["Content-Location"]
  File "/Users/xxxx/.virtualenvs/yyyyy/zzzzzzz/requests/structures.py", line 52, in __getitem__
    return self._store[key.lower()][1]
KeyError: 'content-location'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/xxxx/.virtualenvs/yyyyy/zzzzzzz/savepagenow/api.py", line 105, in capture
    header_links = parse_header_links(response.headers["Link"])
  File "/Users/xxxx/.virtualenvs/yyyyy/zzzzzzz/requests/structures.py", line 52, in __getitem__
    return self._store[key.lower()][1]
KeyError: 'link'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "scrape-results.py", line 533, in <module>
    scrape(wks, headers, counties)
  File "scrape-results.py", line 375, in scrape
    archive_url, captured_flag = savepagenow.capture_or_cache(url, authenticate=True, user_agent="savepagenow (https://stltoday.com)")
  File "/Users/xxxx/.virtualenvs/yyyyy/zzzzzzz/savepagenow/api.py", line 148, in capture_or_cache
    capture(
  File "/Users/xxxx/.virtualenvs/yyyyy/zzzzzzz/savepagenow/api.py", line 110, in capture
    raise WaybackRuntimeError(
savepagenow.exceptions.WaybackRuntimeError: {'status_code': 200, 'headers': {'Server': 'nginx', 'Date': 'Wed, 31 Jul 2024 17:00:50 GMT', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'server-timing': 'captures_list;dur=0.433099, exclusion.robots;dur=0.030207, exclusion.robots.policy;dur=0.022052, esindex;dur=0.008905, cdx.remote;dur=7.628953, LoadShardBlock;dur=296.977015, PetaboxLoader3.datanode;dur=255.918508, load_resource;dur=8.860866, MISS', 'x-app-server': 'wwwb-app204', 'x-ts': '200', 'x-tr': '367', 'X-location': 'All', 'X-RL': '1', 'X-NA': '0', 'X-Page-Cache': 'MISS', 'X-NID': '-', 'Referrer-Policy': 'no-referrer-when-downgrade', 'Permissions-Policy': 'interest-cohort=()', 'Content-Encoding': 'gzip'}}

It's very odd. Occasionally the requests work, but most times they error out with this same sequence. You may be able to reproduce with any/all three of these command-line examples:

savepagenow https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml
savepagenow https://extcontent.stlouisco.com/BOE/eResults/media/media.csv
savepagenow https://travisenr.blob.core.usgovcloudapi.net/prod/Current_02.json

Anyway, is this just me? Am I doing something wrong?

@palewire
Copy link
Owner

palewire commented Aug 1, 2024

I believe you it's a bug, but they just worked for me. Here's my term log:

# palewire @ times-square in ~/Code/spn-test [15:45:23] C:2
$ pipenv run savepagenow https://palewi.re/
https://web.archive.org/web/20240801194650/https://palewi.re/who-is-ben-welsh/

# palewire @ times-square in ~/Code/spn-test [15:47:00] 
$ pipenv run savepagenow https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml
https://web.archive.org/web/20240731161419/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml

# palewire @ times-square in ~/Code/spn-test [15:47:15] 
$ pipenv run savepagenow https://extcontent.stlouisco.com/BOE/eResults/media/media.csv
https://web.archive.org/web/20240731174319/https://extcontent.stlouisco.com/BOE/eResults/media/media.csv

# palewire @ times-square in ~/Code/spn-test [15:47:30] 
$ pipenv run savepagenow https://travisenr.blob.core.usgovcloudapi.net/prod/Current_02.json
https://web.archive.org/web/20240801194743/https://travisenr.blob.core.usgovcloudapi.net/prod/Current_02.json

@Kirkman
Copy link
Author

Kirkman commented Aug 6, 2024

I'm trying it again right now to see if I can use this tonight with election results.

Each time I do this ...

archive_url = savepagenow.capture(wb_url, authenticate=True)

... savepagenow always raises a WaybackRuntimeError with this content (I prettified it):

{
  'status_code': 200,
  'headers': {
    'Server': 'nginx',
    'Date': 'Tue, 06 Aug 2024 22:35:04 GMT',
    'Content-Type': 'text/html',
    'Transfer-Encoding': 'chunked',
    'Connection': 'keep-alive',
    'server-timing': 'captures_list;dur=0.704047, exclusion.robots;dur=0.039045, exclusion.robots.policy;dur=0.024661, esindex;dur=0.015289, cdx.remote;dur=30.101273, LoadShardBlock;dur=249.436769, PetaboxLoader3.datanode;dur=88.640980, PetaboxLoader3.resolve;dur=502.621010, load_resource;dur=385.038612, MISS',
    'x-app-server': 'wwwb-app212',
    'x-ts': '200',
    'x-tr': '718',
    'X-location': 'All',
    'X-RL': '1',
    'X-NA': '0',
    'X-Page-Cache': 'MISS',
    'X-NID': '-',
    'Referrer-Policy': 'no-referrer-when-downgrade',
    'Permissions-Policy': 'interest-cohort=()',
    'Content-Encoding': 'gzip'
  }
}

@palewire
Copy link
Owner

palewire commented Aug 7, 2024

Hmm. I'm struggling to understand what the error is even complaining about. Can you parse any reason out?

@Kirkman
Copy link
Author

Kirkman commented Aug 7, 2024

I think the savepagenow library just defaults to raising a WaybackRuntimeError when it doesn't find either Content-Location or Link in the response headers.

The response headers that I get when I try to archive these election files generally didn't have either of those fields. But they did often include 'status_code': 200, which might be an indicator of success. But, oddly, the responses don't always have the status_code field, either.

I honestly don't understand ... I would expect responses from API like this one from IA to be consistent and always have the same fields.

Looking at the Wayback Machine this morning, it seems like maybe some of my requests last night may have succeeded, because I do see a few entries for each of the files. But I don't see as many as I would have expected.

@palewire
Copy link
Owner

palewire commented Aug 8, 2024

Hmm. I can't say I know the answer here, @Kirkman, since the insides of the IA system are a mystery to me.

I could imagine a new catch, like the one below, that would only raise the error if the status code is not 200.

        except Exception:
            # If neither of those things works, check the status code.
            # If it's 200, we assume the archiving request worked but didn't return a URL
            if status_code == 200:
                return None
            # If it's not 200, we raise an error.
            raise WaybackRuntimeError(
                dict(status_code=response.status_code, headers=response.headers)
            )

I'm not sure how I feel about this solution, given that we don't understand the response. What do you think?

@Kirkman
Copy link
Author

Kirkman commented Aug 8, 2024

Yeah, it's definitely not ideal. Since we don't know exactly what it means, maybe it might make sense within that catch to raise a warning (and return None) if there's a 200, and raise an error if not?

@palewire
Copy link
Owner

palewire commented Aug 8, 2024

Not crazy. Would inserting a warning affect our CLI outputs at all? I'm not smart about how warnings works.

@Kirkman
Copy link
Author

Kirkman commented Aug 8, 2024

Oof, I'm not sure. I'm a novice with warnings, and haven't done much with CLI stuff.

I became familiar with seeing warnings from libraries like agate. The nice thing is that it lets you know something is going on, but you can use Python's warnings library to filter them out later if you're okay with the behavior they're warning you about.

@palewire
Copy link
Owner

palewire commented Aug 9, 2024

Gotcha. Would you mind joining me for a scan of the public API docs to see if we can spot any clues?

https://docs.google.com/document/d/1Nsv52MvSjbLb2PCpHlat0gkzw0EvtSgpKHu4mk0MnrA/edit?usp=sharing

@palewire
Copy link
Owner

palewire commented Aug 16, 2024

My source at archive.org says:

the SPN API returns status=200 which means that it operates correctly and returns a valid response.
The response may contain a correct capture result or an error message.
The SPN API response status doesn't have anything to do with the capture status.

The response reported in github does not contain the response body but just the headers.
Could we please see the response body?
It should contain some extra info to understand what is going on.

@palewire
Copy link
Owner

As archive.org asked, I added the response content to our errors. Here's what I'm seeing:

{
    "status_code": 200,
    "headers": {
        "Server": "nginx",
        "Date": "Sat, 17 Aug 2024 17:01:12 GMT",
        "Content-Type": "text/html",
        "Transfer-Encoding": "chunked",
        "Connection": "keep-alive",
        "server-timing": "captures_list;dur=0.629037, exclusion.robots;dur=0.030612, exclusion.robots.policy;dur=0.018063, esindex;dur=0.012796, cdx.remote;dur=7.462792, LoadShardBlock;dur=59.641136, PetaboxLoader3.datanode;dur=45.015477, PetaboxLoader3.resolve;dur=58.849881, load_resource;dur=60.678172, MISS",
        "x-app-server": "wwwb-app226",
        "x-ts": "200",
        "x-tr": "183",
        "X-location": "All",
        "X-RL": "1",
        "X-NA": "0",
        "X-Page-Cache": "MISS",
        "X-NID": "-",
        "Referrer-Policy": "no-referrer-when-downgrade",
        "Permissions-Policy": "interest-cohort=()",
        "Content-Encoding": "gzip",
    },
    "content": b'<!DOCTYPE html>\n<html>\n<head>\n<title>Wayback Machine</title>\n<script src="//archive.org/includes/athena.js" type="text/javascript"></script>\n<script type="text/javascript">window.addEventListener(\'DOMContentLoaded\',function(){var v=archive_analytics.values;v.service=\'wb\';v.server_name=\'wwwb-app226.us.archive.org\';v.server_ms=181;archive_analytics.send_pageview({});});</script>\n<script type="text/javascript" src="https://web-static.archive.org/_static/js/bundle-playback.js?v=2mqEsuX0" charset="utf-8"></script>\n<link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/banner-styles.css?v=S1zqJCYt" />\n<link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/iconochive.css?v=qtvMKcIJ" />\n<script src="https://web-static.archive.org/_static/js/jquery-1.11.1.min.js"></script>\n</head>\n<body style="height:100vh;overflow:hidden;margin:0;display:flex;flex-flow:column nowrap;align-items:stretch;">\n<div style="flex:0 0;">\n<!-- BEGIN WAYBACK TOOLBAR INSERT -->\n<script>__wm.rw(0);</script>\n<div id="wm-ipp-base" lang="en" style="display:none;direction:ltr;">\n<div id="wm-ipp" style="position:fixed;left:0;top:0;right:0;">\n<div id="donato" style="position:relative;width:100%;">\n  <div id="donato-base">\n    <iframe id="donato-if" src="https://archive.org/includes/donate.php?as_page=1&amp;platform=wb&amp;referer=https%3A//web.archive.org/web/20240811175440/https%3A//www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml"\n\t    scrolling="no" frameborder="0" style="width:100%; height:100%">\n    </iframe>\n  </div>\n</div><div id="wm-ipp-inside">\n  <div id="wm-toolbar" style="position:relative;display:flex;flex-flow:row nowrap;justify-content:space-between;">\n    <div id="wm-logo" style="/*width:110px;*/padding-top:12px;">\n      <a href="/web/" title="Wayback Machine home page"><img src="https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-200.png" srcset="https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-100.png, https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-150.png 1.5x, https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-200.png 2x" alt="Wayback Machine" style="width:100px" border="0" /></a>\n    </div>\n    <div class="c" style="display:flex;flex-flow:column nowrap;justify-content:space-between;flex:1;">\n      <form class="u" style="display:flex;flex-direction:row;flex-wrap:nowrap;" target="_top" method="get" action="/web/submit" name="wmtb" id="wmtb"><input type="text" name="url" id="wmtbURL" value="https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" onfocus="this.focus();this.select();" style="flex:1;"/><input type="hidden" name="type" value="replay" /><input type="hidden" name="date" value="20240811175440" /><input type="submit" value="Go" />\n      </form>\n      <div style="display:flex;flex-flow:row nowrap;align-items:flex-end;">\n                <div class="s" id="wm-nav-captures" style="flex:1;">\n                    <a class="t" href="/web/20240811175440*/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" title="See a list of every capture for this URL">6 captures</a>\n          <div class="r" title="Timespan for captures of this URL">31 Jul 2024 - 11 Aug 2024</div>\n          </div>\n        <div class="k">\n          <a href="" id="wm-graph-anchor">\n            <div id="wm-ipp-sparkline" title="Explore captures for this URL" style="position: relative">\n              <canvas id="wm-sparkline-canvas" width="725" height="27" border="0"></canvas>\n            </div>\n          </a>\n        </div>\n      </div>\n    </div>\n    <div class="n">\n      <table>\n        <tbody>\n          <!-- NEXT/PREV MONTH NAV AND MONTH INDICATOR -->\n          <tr class="m">\n            <td class="b" nowrap="nowrap">Jul</td>\n            <td class="c" id="displayMonthEl" title="You are here: 17:54:40 Aug 11, 2024">AUG</td>\n            <td class="f" nowrap="nowrap">Sep</td>\n          </tr>\n          <!-- NEXT/PREV CAPTURE NAV AND DAY OF MONTH INDICATOR -->\n          <tr class="d">\n            <td class="b" nowrap="nowrap"><a href="https://web.archive.org/web/20240807025309/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" title="02:53:09 Aug 07, 2024"><img src="https://web-static.archive.org/_static/images/toolbar/wm_tb_prv_on.png" alt="Previous capture" width="14" height="16" border="0" /></a></td>\n            <td class="c" id="displayDayEl" style="width:34px;font-size:22px;white-space:nowrap;" title="You are here: 17:54:40 Aug 11, 2024">11</td>\n            <td class="f" nowrap="nowrap"><img src="https://web-static.archive.org/_static/images/toolbar/wm_tb_nxt_off.png" alt="Next capture" width="14" height="16" border="0" /></td>\n          </tr>\n          <!-- NEXT/PREV YEAR NAV AND YEAR INDICATOR -->\n          <tr class="y">\n            <td class="b" nowrap="nowrap">2023</td>\n            <td class="c" id="displayYearEl" title="You are here: 17:54:40 Aug 11, 2024">2024</td>\n            <td class="f" nowrap="nowrap">2025</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n    <div class="r" style="display:flex;flex-flow:column nowrap;align-items:flex-end;justify-content:space-between;">\n      <div id="wm-btns" style="text-align:right;height:23px;">\n                <span class="xxs">\n          <div id="wm-save-snapshot-success">success</div>\n          <div id="wm-save-snapshot-fail">fail</div>\n          <a id="wm-save-snapshot-open" href="#" title="Share via My Web Archive" >\n            <span class="iconochive-web"></span>\n          </a>\n          <a href="https://archive.org/account/login.php" title="Sign In" id="wm-sign-in">\n            <span class="iconochive-person"></span>\n          </a>\n          <span id="wm-save-snapshot-in-progress" class="iconochive-web"></span>\n        </span>\n                <a class="xxs" href="http://faq.web.archive.org/" title="Get some help using the Wayback Machine" style="top:-6px;"><span class="iconochive-question" style="color:rgb(87,186,244);font-size:160%;"></span></a>\n        <a id="wm-tb-close" href="#close" style="top:-2px;" title="Close the toolbar"><span class="iconochive-remove-circle" style="color:#888888;font-size:240%;"></span></a>\n      </div>\n      <div id="wm-share" class="xxs">\n        <a href="/web/20240811175440/http://web.archive.org/screenshot/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml"\n           id="wm-screenshot"\n           title="screenshot">\n          <span class="wm-icon-screen-shot"></span>\n        </a>\n        <a href="#" id="wm-video" title="video">\n          <span class="iconochive-movies"></span>\n        </a>\n        <a id="wm-share-facebook" href="#" data-url="https://web.archive.org/web/20240811175440/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" title="Share on Facebook" style="margin-right:5px;" target="_blank"><span class="iconochive-facebook" style="color:#3b5998;font-size:160%;"></span></a>\n        <a id="wm-share-twitter" href="#" data-url="https://web.archive.org/web/20240811175440/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" title="Share on Twitter" style="margin-right:5px;" target="_blank"><span class="iconochive-twitter" style="color:#1dcaff;font-size:160%;"></span></a>\n      </div>\n      <div style="padding-right:2px;text-align:right;white-space:nowrap;">\n        <a id="wm-expand" class="wm-btn wm-closed" href="#expand"><span id="wm-expand-icon" class="iconochive-down-solid"></span> <span class="xxs" style="font-size:80%;">About this capture</span></a>\n      </div>\n    </div>\n  </div>\n    <div id="wm-capinfo" style="border-top:1px solid #777;display:none; overflow: hidden">\n        <div id="wm-capinfo-notice" source="api"></div>\n                <div id="wm-capinfo-collected-by">\n    <div style="background-color:#666;color:#fff;font-weight:bold;text-align:center">COLLECTED BY</div>\n    <div style="padding:3px;position:relative" id="wm-collected-by-content">\n      <div style="display:inline-block;vertical-align:top;width:49%;">\n\t\t\t<span class="c-logo" style="background-image:url(https://archive.org/services/img/save-page-now)"></span>\n\t\t<div>Collection: <a style="color:#33f;" href="https://archive.org/details/save-page-now" target="_new"><span class="wm-title">Save Page Now</span></a></div>\n\t      </div>\n    </div>\n    </div>\n    <div id="wm-capinfo-timestamps">\n    <div style="background-color:#666;color:#fff;font-weight:bold;text-align:center" title="Timestamps for the elements of this page">TIMESTAMPS</div>\n    <div>\n      <div id="wm-capresources" style="margin:0 5px 5px 5px;max-height:250px;overflow-y:scroll !important"></div>\n      <div id="wm-capresources-loading" style="text-align:left;margin:0 20px 5px 5px;display:none"><img src="https://web-static.archive.org/_static/images/loading.gif" alt="loading" /></div>\n    </div>\n    </div>\n  </div></div></div></div><div id="wm-ipp-print">The Wayback Machine - https://web.archive.org/web/20240811175440/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml</div>\n<script type="text/javascript">//<![CDATA[\n__wm.bt(725,27,25,2,"web","https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml","20240811175440",1996,"https://web-static.archive.org/_static/",["https://web-static.archive.org/_static/css/banner-styles.css?v=S1zqJCYt","https://web-static.archive.org/_static/css/iconochive.css?v=qtvMKcIJ"], false);\n  __wm.rw(1);\n//]]></script>\n<!-- END WAYBACK TOOLBAR INSERT -->\n </div>\n<iframe id="playback" src="https://web.archive.org/web/20240811175440if_/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" frameborder="0" style="flex:1 0">\n</iframe>\n<script>\nif (window.location.hash) {\n  document.getElementById("playback").src += window.location.hash;\n}\n</script>\n</body>\n</html>',
}

@palewire
Copy link
Owner

Here's that HTML beautified:

Screen Shot 2024-08-17 at 1 05 38 PM
<!DOCTYPE html>
<html>
<head>
<title>Wayback Machine</title>
<script src="//archive.org/includes/athena.js" type="text/javascript"></script>
<script type="text/javascript">window.addEventListener(\'DOMContentLoaded\',function(){var v=archive_analytics.values;v.service=\'wb\';v.server_name=\'wwwb-app226.us.archive.org\';v.server_ms=181;archive_analytics.send_pageview({});});</script>
<script type="text/javascript" src="https://web-static.archive.org/_static/js/bundle-playback.js?v=2mqEsuX0" charset="utf-8"></script>
<link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/banner-styles.css?v=S1zqJCYt" />
<link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/iconochive.css?v=qtvMKcIJ" />
<script src="https://web-static.archive.org/_static/js/jquery-1.11.1.min.js"></script>
</head>
<body style="height:100vh;overflow:hidden;margin:0;display:flex;flex-flow:column nowrap;align-items:stretch;">
<div style="flex:0 0;">
<!-- BEGIN WAYBACK TOOLBAR INSERT -->
<script>__wm.rw(0);</script>
<div id="wm-ipp-base" lang="en" style="display:none;direction:ltr;">
<div id="wm-ipp" style="position:fixed;left:0;top:0;right:0;">
<div id="donato" style="position:relative;width:100%;">
  <div id="donato-base">
    <iframe id="donato-if" src="https://archive.org/includes/donate.php?as_page=1&amp;platform=wb&amp;referer=https%3A//web.archive.org/web/20240811175440/https%3A//www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml"
\t    scrolling="no" frameborder="0" style="width:100%; height:100%">
    </iframe>
  </div>
</div><div id="wm-ipp-inside">
  <div id="wm-toolbar" style="position:relative;display:flex;flex-flow:row nowrap;justify-content:space-between;">
    <div id="wm-logo" style="/*width:110px;*/padding-top:12px;">
      <a href="/web/" title="Wayback Machine home page"><img src="https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-200.png" srcset="https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-100.png, https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-150.png 1.5x, https://web-static.archive.org/_static/images/toolbar/wayback-toolbar-logo-200.png 2x" alt="Wayback Machine" style="width:100px" border="0" /></a>
    </div>
    <div class="c" style="display:flex;flex-flow:column nowrap;justify-content:space-between;flex:1;">
      <form class="u" style="display:flex;flex-direction:row;flex-wrap:nowrap;" target="_top" method="get" action="/web/submit" name="wmtb" id="wmtb"><input type="text" name="url" id="wmtbURL" value="https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" onfocus="this.focus();this.select();" style="flex:1;"/><input type="hidden" name="type" value="replay" /><input type="hidden" name="date" value="20240811175440" /><input type="submit" value="Go" />
      </form>
      <div style="display:flex;flex-flow:row nowrap;align-items:flex-end;">
                <div class="s" id="wm-nav-captures" style="flex:1;">
                    <a class="t" href="/web/20240811175440*/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" title="See a list of every capture for this URL">6 captures</a>
          <div class="r" title="Timespan for captures of this URL">31 Jul 2024 - 11 Aug 2024</div>
          </div>
        <div class="k">
          <a href="" id="wm-graph-anchor">
            <div id="wm-ipp-sparkline" title="Explore captures for this URL" style="position: relative">
              <canvas id="wm-sparkline-canvas" width="725" height="27" border="0"></canvas>
            </div>
          </a>
        </div>
      </div>
    </div>
    <div class="n">
      <table>
        <tbody>
          <!-- NEXT/PREV MONTH NAV AND MONTH INDICATOR -->
          <tr class="m">
            <td class="b" nowrap="nowrap">Jul</td>
            <td class="c" id="displayMonthEl" title="You are here: 17:54:40 Aug 11, 2024">AUG</td>
            <td class="f" nowrap="nowrap">Sep</td>
          </tr>
          <!-- NEXT/PREV CAPTURE NAV AND DAY OF MONTH INDICATOR -->
          <tr class="d">
            <td class="b" nowrap="nowrap"><a href="https://web.archive.org/web/20240807025309/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" title="02:53:09 Aug 07, 2024"><img src="https://web-static.archive.org/_static/images/toolbar/wm_tb_prv_on.png" alt="Previous capture" width="14" height="16" border="0" /></a></td>
            <td class="c" id="displayDayEl" style="width:34px;font-size:22px;white-space:nowrap;" title="You are here: 17:54:40 Aug 11, 2024">11</td>
            <td class="f" nowrap="nowrap"><img src="https://web-static.archive.org/_static/images/toolbar/wm_tb_nxt_off.png" alt="Next capture" width="14" height="16" border="0" /></td>
          </tr>
          <!-- NEXT/PREV YEAR NAV AND YEAR INDICATOR -->
          <tr class="y">
            <td class="b" nowrap="nowrap">2023</td>
            <td class="c" id="displayYearEl" title="You are here: 17:54:40 Aug 11, 2024">2024</td>
            <td class="f" nowrap="nowrap">2025</td>
          </tr>
        </tbody>
      </table>
    </div>
    <div class="r" style="display:flex;flex-flow:column nowrap;align-items:flex-end;justify-content:space-between;">
      <div id="wm-btns" style="text-align:right;height:23px;">
                <span class="xxs">
          <div id="wm-save-snapshot-success">success</div>
          <div id="wm-save-snapshot-fail">fail</div>
          <a id="wm-save-snapshot-open" href="#" title="Share via My Web Archive" >
            <span class="iconochive-web"></span>
          </a>
          <a href="https://archive.org/account/login.php" title="Sign In" id="wm-sign-in">
            <span class="iconochive-person"></span>
          </a>
          <span id="wm-save-snapshot-in-progress" class="iconochive-web"></span>
        </span>
                <a class="xxs" href="http://faq.web.archive.org/" title="Get some help using the Wayback Machine" style="top:-6px;"><span class="iconochive-question" style="color:rgb(87,186,244);font-size:160%;"></span></a>
        <a id="wm-tb-close" href="#close" style="top:-2px;" title="Close the toolbar"><span class="iconochive-remove-circle" style="color:#888888;font-size:240%;"></span></a>
      </div>
      <div id="wm-share" class="xxs">
        <a href="/web/20240811175440/http://web.archive.org/screenshot/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml"
           id="wm-screenshot"
           title="screenshot">
          <span class="wm-icon-screen-shot"></span>
        </a>
        <a href="#" id="wm-video" title="video">
          <span class="iconochive-movies"></span>
        </a>
        <a id="wm-share-facebook" href="#" data-url="https://web.archive.org/web/20240811175440/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" title="Share on Facebook" style="margin-right:5px;" target="_blank"><span class="iconochive-facebook" style="color:#3b5998;font-size:160%;"></span></a>
        <a id="wm-share-twitter" href="#" data-url="https://web.archive.org/web/20240811175440/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" title="Share on Twitter" style="margin-right:5px;" target="_blank"><span class="iconochive-twitter" style="color:#1dcaff;font-size:160%;"></span></a>
      </div>
      <div style="padding-right:2px;text-align:right;white-space:nowrap;">
        <a id="wm-expand" class="wm-btn wm-closed" href="#expand"><span id="wm-expand-icon" class="iconochive-down-solid"></span> <span class="xxs" style="font-size:80%;">About this capture</span></a>
      </div>
    </div>
  </div>
    <div id="wm-capinfo" style="border-top:1px solid #777;display:none; overflow: hidden">
        <div id="wm-capinfo-notice" source="api"></div>
                <div id="wm-capinfo-collected-by">
    <div style="background-color:#666;color:#fff;font-weight:bold;text-align:center">COLLECTED BY</div>
    <div style="padding:3px;position:relative" id="wm-collected-by-content">
      <div style="display:inline-block;vertical-align:top;width:49%;">
\t\t\t<span class="c-logo" style="background-image:url(https://archive.org/services/img/save-page-now)"></span>
\t\t<div>Collection: <a style="color:#33f;" href="https://archive.org/details/save-page-now" target="_new"><span class="wm-title">Save Page Now</span></a></div>
\t      </div>
    </div>
    </div>
    <div id="wm-capinfo-timestamps">
    <div style="background-color:#666;color:#fff;font-weight:bold;text-align:center" title="Timestamps for the elements of this page">TIMESTAMPS</div>
    <div>
      <div id="wm-capresources" style="margin:0 5px 5px 5px;max-height:250px;overflow-y:scroll !important"></div>
      <div id="wm-capresources-loading" style="text-align:left;margin:0 20px 5px 5px;display:none"><img src="https://web-static.archive.org/_static/images/loading.gif" alt="loading" /></div>
    </div>
    </div>
  </div></div></div></div><div id="wm-ipp-print">The Wayback Machine - https://web.archive.org/web/20240811175440/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml</div>
<script type="text/javascript">//<![CDATA[
__wm.bt(725,27,25,2,"web","https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml","20240811175440",1996,"https://web-static.archive.org/_static/",["https://web-static.archive.org/_static/css/banner-styles.css?v=S1zqJCYt","https://web-static.archive.org/_static/css/iconochive.css?v=qtvMKcIJ"], false);
  __wm.rw(1);
//]]></script>
<!-- END WAYBACK TOOLBAR INSERT -->
 </div>
<iframe id="playback" src="https://web.archive.org/web/20240811175440if_/https://www.livevoterturnout.com/ENR/stcharlesmoenr/28/summary_28.xml" frameborder="0" style="flex:1 0">
</iframe>
<script>
if (window.location.hash) {
  document.getElementById("playback").src += window.location.hash;
}
</script>
</body>
</html>

@palewire
Copy link
Owner

palewire commented Aug 17, 2024

I'm not sure I know what that is, but I wonder if it's a redirect to a previously archived page that isn't registering as cached.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants