【问题标题】:Reverse AMP url with python (get regular URL from amp)使用 python 反向 AMP url(从 amp 获取常规 URL)
【发布时间】:2018-08-17 09:49:46
【问题描述】:

我将如何扭转 Google 的 AMP api 的流程?

我希望获取一个 AMP(加速移动页面)网址并提供常规(原始)网址。我想知道是否有人知道如何在 Python(或任何其他语言)中做到这一点? 任何帮助将不胜感激。

一个例子:

https://amp.cnn.com/cnn/2018/03/08/politics/jeff-flake-anti-tariff-bill/
预期输出:
https://cnn.com/2018/03/08/politics/jeff-flake-anti-tariff-bill/

第二个例子:

https://www.google.ca/amp/s/mobile.nytimes.com/2018/03/08/us/politics/trump-tariff-announcement.amp.html
预期输出:
https://www.nytimes.com/2018/03/08/us/politics/trump-tariff-announcement.html

第三个(也是最后一个)示例:

https://www.google.ca/amp/s/www.theverge.com/platform/amp/2018/3/8/17097904/android-ios-smartphone-brand-loyalty
预期输出:
https://www.theverge.com/2018/3/8/17097904/android-ios-smartphone-brand-loyalty

不幸的是,AMP 的实现似乎有很大差异。我想一种方法可能是去掉任何“amp”和周围的点 (.) 或斜线 (/),但是,我可以想象这样一种情况,这不是最明智的方法(主要是如果页面 URL 实际上应该在其结尾等中有amp(它出现在常规浏览中)。

【问题讨论】:

  • 您能否再澄清一下 - 不确定您的意思。也许添加一个具体的例子,比如 url/link 作为输入和你期望的输出
  • @daKmoR 添加了 3 个示例

标签: python python-3.x url amp-html


【解决方案1】:

对于将来遇到此问题的任何人,我想我会分享我的解决方案。使用来自@daKmoR 的信息,我最终得出以下结论:

import metadata_parser
page = metadata_parser.MetadataParser(url="https://amp.cnn.com/cnn/2018/03/08/politics/jeff-flake-anti-tariff-bill/ ")
#page = metadata_parser.MetadataParser(url="https://www.google.ca/amp/s/www.theverge.com/platform/amp/2018/3/8/17097904/android-ios-smartphone-brand-loyalty/")
#print(page.metadata)
#TODO: Doesnt work for verge
print("New")
real_URL = page.get_metadata_link('url')
if real_URL:
    print(real_URL)
else:
    print("Boo")

如果您遇到诸如“TLSV1_ALERT_PROTOCOL_VERSION”之类的错误,那么您可能正在使用过时的 Python 版本进行编译。上面引用的“metadata_parser”是available on GitHub

编辑: 这是每个 @sebastian-benz 响应的更新代码。

import metadata_parser
#page = metadata_parser.MetadataParser(url="https://amp.cnn.com/cnn/2018/03/08/politics/jeff-flake-anti-tariff-bill/ ")
page = metadata_parser.MetadataParser(url="https://www.google.ca/amp/s/mobile.nytimes.com/2018/03/08/us/politics/trump-tariff-announcement.amp.html")
#print(page.metadata)
#TODO: Doesnt work for verge
print("New")
#real_URL = page.get_metadata_link('url')
real_URL = page.get_url_canonical()
if real_URL:
    print(real_URL)
else:
    print("Boo")

【讨论】:

    【解决方案2】:

    AMP 网页必须通过以下方式引用其规范版本:

    <link rel="canonical" href="https://www.example.com/url/to/full/document.html">
    

    发现页面的非 AMP 版本的正确方法是获取 AMP 文档并提取其规范链接标记的 href 值。

    您可以在official documentation 中了解更多信息。

    【讨论】:

      【解决方案3】:

      对于 Python 3,另一个选项可能是打开 url 并从响应中获取最终 url。 关注@jadelord 在another question 上的回答:

      import urllib
      def resolve(url):
          return urllib.request.urlopen(url).geturl()
      

      【讨论】:

        猜你喜欢
        • 2017-09-07
        • 2022-09-27
        • 2017-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多