public Vine RetrieveVine(string permalink, string submitter = null) { Vine vine = new Vine() { Permalink = permalink, Submitter = submitter }; // Get the vine code int startIndex = vine.Permalink.IndexOf("v/") + 2; int endIndex = vine.Permalink.Length; for (int i = startIndex; i < vine.Permalink.Length; i++) { char character = vine.Permalink[i]; if (!Char.IsLetterOrDigit(character)) { endIndex = i; break; } } string videoCode = vine.Permalink.Substring(startIndex, endIndex - startIndex); ScrapingBrowser browser = new ScrapingBrowser(); WebResource jsonResource = null; var task = Task.Run(() => { jsonResource = browser.DownloadWebResource(new Uri("https://archive.vine.co/posts/" + videoCode + ".json")); }); bool isSuccess; try { isSuccess = task.Wait(TimeSpan.FromMilliseconds(2000)); } catch (Exception e) { return(vine); } if (isSuccess) { JArray objects = JArray.Parse("[" + jsonResource.GetTextContent() + "]"); vine.Description = objects.First["description"].ToString(); vine.VideoUrl = objects.First["videoUrl"].ToString(); vine.ThumbnailUrl = objects.First["thumbnailUrl"].ToString(); vine.Created = DateTime.Parse(objects.First["created"].ToString()); vine.Loops = FormatNumber(Int32.Parse(objects.First["loops"].ToString())); vine.Likes = FormatNumber(Int32.Parse(objects.First["likes"].ToString())); vine.Username = objects.First["username"].ToString(); vine.Rating = 0; } return(vine); }