【问题标题】:Getting Vine PostID from Video URL从视频 URL 获取 Vine PostID
【发布时间】:2016-08-29 10:33:55
【问题描述】:

我正在使用 Vine API 包装器“VineSharp”nuget 包来尝试获取有关 Vine 视频的一些详细信息。 我有视频网址。即:“https://vine.co/v/eYgeYlYAOQv” 但是,为了获取 vine post 数据,显然 VineSharp(以及其他 Vine API 包装器)请求插入 vine post ID - 我没有。

如果我有视频 URL 或视频 ID,我已经在 Google 上进行了很多搜索以了解如何获取帖子 ID - 但找不到任何内容。

如果 Vine API 支持帖子查询以使用帖子的 ID 获取特定帖子的详细信息,那么只能从另一个 API 调用(如时间线或频道请求)的 Json 中检索帖子 ID 本身是不合逻辑的......

我错过了什么?

【问题讨论】:

    标签: c# video vine


    【解决方案1】:

    这样做的一种老生常谈的方法是使用WebClient class 下载https://vine.co/v/eYgeYlYAOQv 的内容并使用正则表达式解析结果。

    帖子 ID 在返回的网页中出现多次。您可以使用以下正则表达式之一(或两者兼而有之):

    vine://post/(\d+)[^\d]
    "postIdStr":\s*"(\d+)"

    第一个匹配组将包含帖子 ID。

    这是一个尝试两种模式的工作示例:https://regex101.com/r/aV9fD8/4

    这是一个下载网站、尝试两种模式并打印第一个匹配的帖子 ID 的工作示例:https://dotnetfiddle.net/klWnxw

    using (var client = new WebClient())
    {       
        var content = client.DownloadString("https://vine.co/v/eYgeYlYAOQv");
    
        var postIdMatch = Regex.Match(
            content, 
            @"vine://post/(\d+)[^\d]|""postIdStr"":\s*""(\d+)""");
    
        if (postIdMatch.Success)
            Console.WriteLine(
                postIdMatch.Groups[1].Value != string.Empty 
                    ? postIdMatch.Groups[1].Value 
                    : postIdMatch.Groups[2].Value);
        else
            Console.WriteLine("No post ID found.");
    }
    

    输出:

    1270971006727159808

    【讨论】:

    • 我认为可以做到,但我认为如果有些人足够好心来实现 Vine API 包装器,他们会完成这项工作...... [^\d] 有什么用正则表达式呢?没有它也能很好地工作......
    • @AvnerHoffmann,是的,这是真的。只是忘了匹配无论如何都是贪婪的。
    猜你喜欢
    • 1970-01-01
    • 2013-06-21
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2016-03-19
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多