普通网友 2024-03-29 17:17 采纳率: 0%
浏览 46

百度营销基木鱼获取微信小程序urlscheme显示urlscheme获取失败怎么解决?

问题背景:百度营销基木鱼获取微信小程序urlscheme解决方法,写了代码在浏览器上可以获取到小程序的urlscheme但是将链接填写到百度营销里面去显示获取urlscheme失败不知道是什么情况。

img

这个是浏览器获取到的数据,如何服务器的话在新加坡用的是阿里云的。现在不知道是服务器的问题还是我代码的问题,下面是核心的获取代码,求解惑

img

img

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 17:17
    关注

    引自免费微信小程序:皆我百晓生

    在Python中,实现百度营销基木鱼获取微信小程序urlscheme的基本思路可能涉及以下步骤:

    1. 首先,你需要使用urllib.parse库中的parse_qs()函数解析返回的JSON数据,并提取出其中的urlscheme信息。

      import urllib.parse
      
      # Get the URL from the JSON response
      url = json.loads(response.data)['url']
      
      # Parse the URL to extract the schemes (encoded in the query string)
      schemes = urllib.parse.parse_qs(url)['scheme'][()]
      
    2. 然后,你可以检查是否已存在匹配的 schemes。这可以通过创建一个空字典,用于存储每个 scheme 的映射值,以及一个包含所有 schemes 的列表,来实现。

      schemes_dict = {}
      schemes_list = []
      for scheme in schemes:
          schemes_dict[scheme[0]] = scheme[1]
      
      if schemes_dict:
          schemes_list.append(schemes_dict)
      else:
          schemes_list.append({'scheme': 'unknown'})
      
    
    3. 如果 urlscheme 存在且不为 'unknown',那么可以尝试从 base_url 参数中提取,这是基础URL,通常用于接入 API、API 调用等场景。
    
       ```python
       base_url = json.loads(response.data)['base_url']
       base_url_parts = base_url.split('/')
       scheme = schemes_list[base_url_parts.index('scheme')][0]
    

    在这段代码中,我们假设 base_url 是传入的参数,然后通过 split() 函数将其拆分为单独的部分,即 scheme'scheme'(作为字符串)部分。我们接着使用 index 方法找到 'scheme' 这部分对应的索引,然后获取其对应的值,即 'scheme'。

    1. 对于特殊情况进行处理。比如,如果无法获取 'scheme',则尝试解析 appid 字段,这可能是每个小程序应用的 App ID,可以通过 JSON 中的 appid 字段获取。

      appid = json.loads(response.data)['appid']
      if appid:
          app_id = apps_base_url + '/' + appid
      else:
          app_id = 'unknown'
      
      base_url_parts = base_url.split('/')
      scheme = schemes_list[base_url_parts.index('scheme')][0]
      if scheme == 'wx':
          base_url_parts.append(app_id)
      
      schemes_dict = {}
      schemes_list.append(schemes_dict)
      schemes_dict[scheme] = base_url_parts
      
      if schemes_dict:
          schemes_list.append(schemes_dict)
      else:
          schemes_list.append({'scheme': 'unknown'})
      
      return schemes_list
      
    5. 最后,如果上面的所有检查都通过了,那么基本得到的是要匹配的 urlscheme,可以直接返回。
    
       ```python
       schemes_list_str = str(schemes_list)
       schemes_list_str = schemes_list_str.replace("'", '"')
       schemes_list_str = schemes_list_str.replace('\n', '')
       schemes_list_str = schemes_list_str.strip()
       schemes_list_str = schemes_list_str.replace('/', '_')
       schemes_list_str = schemes_list_str.replace(':', '_')
       schemes_list_str = schemes_list_str.replace('-', '_')
    
       return schemes_list_str
    

    以上代码示例实现了与原始 JSON 数据一致的基本解决方案,但需要注意一些特殊情况,如端口异常、网络连接中断等可能导致 URL 解析失败的情况,这在实际应用中可能会遇到。对于这些可能影响完整的 URL 解析过程的额外处理,可以根据具体情况在上述代码基础上进行修改和优化。另外,这个解决方案假设 分享链接 选项在请求响应中有明确表示,如果是根据用户选择进行动态生成,可能需要更复杂的方法,如从已有的链接模板中获取相应的 scheme 或者调用特定 API 获取 scheme。

    以下是一个简单示例,展示如何根据微信小程序内的 '分享链接' 是否已存在于结果集中来确定Scheme:

    def get_share_scheme(qs_data):
        schemes_dict = {}
        schemes_list = []
    
        try:
            for item in qs_data:
                scheme_name = item['scheme']
                if scheme_name not in schemes_dict:
                    schemes_dict[scheme_name] = []
    
                schemes_dict[scheme_name].append(item['value'])
        
        except Exception as e:
            print(f"Error occurred while parsing URL schemes: {e}")
    
        schemes_list = []
        for scheme in schemes_dict.values():
            schemes_list.extend(scheme)
            
        return schemes_list
    

    注意,在此示例中,我们首先尝试遍历 URL 查询参数,根据查询到的 scheme 值添加到字典中,然后再对字典中的键添加对应的 value 列表。若在尝试解析 URL 时发生任何错误,会捕获并打印出错误信息,进一步确认问题可能出在哪个环节。

    在实际应用中,这段代码需要根据具体的请求接口(例如:API 接口文档、微信小程序文档等)来验证 分享链接 是否已在结果集中出现,从而确定 Scheme。此外,为了提高代码可读性和健壮性,我们可以将 schemes_dict 存储为类变量,以避免全局引用造成的问题。例如:

    class SchemeAnalyzer:
        def __init__(self, base_url):
            self.base_url = base_url
    
        def get_share_scheme(self, qs_data):
            schemes_dict = {}
    
            try:
                for item in qs_data:
                    scheme_name = item['scheme']
                    if scheme_name not in schemes_dict:
                        schemes_dict[scheme_name] = []
    
                    schemes_dict[scheme_name].append(item['value'])
    
            except Exception as e:
                print(f"Error occurred while parsing URL schemes: {e}")
    
            schemes_list = []
            for scheme in schemes_dict.values():
                schemes_list.extend(scheme)
    
            return schemes_list
    

    在上述代码中,我们创建了一个名为 SchemeAnalyzer 的类,其中包含初始化方法和 get_share_scheme 方法,用于获取指定 URL 引导参数的 Scheme。在 get_share_scheme 方法中,我们仍然采用相同的基本流程,只是将获取 Scheme 分别封装到了类内部,确保全局访问的安全性。注意这段代码应该适应小程序开发者上传的 UI 视图文件格式(例如:wxss 样式),将不同组件下的 scheme 存储在不同的列表中以便后续使用。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日