private IEnumerable <Story> GetStoriesForProject(ConfigSettings config) { var filesystemStoryReader = new FilesystemStoryReader(new Filesystem(), config); var storyProvider = new StoryProvider(filesystemStoryReader, new StoryParser()); return(storyProvider.GetStories()); }
public IEnumerable <Story> GetStories(string location) { var storyReader = new SingleFileStoryReader(new Filesystem(), ConfigSettings, location); var storyProvider = new StoryProvider(storyReader, new StoryParser()); return(storyProvider.GetStories()); }
public int Run() { var failed = Handler.HandleStories(StoryProvider.GetStories()).Failed; // hack SessionContext.Dispose(); return(failed); }
public async Task <IActionResult> GetStory(int storyId, int chapterNo = 1, CancellationToken ctx = default) { const string storyProviderName = "FanFiction.Net"; const int fetchOperationTimeoutMilliSeconds = 4500; const string providerUrl = "https://www.fanfiction.net"; var endpointFragment = $"/s/{storyId}/{chapterNo}"; var storyProvider = new StoryProvider() { BaseUri = new Uri(providerUrl), UriFragment = new Uri(endpointFragment, UriKind.Relative), FetchRequestTimeoutMilliSeconds = fetchOperationTimeoutMilliSeconds, Name = storyProviderName }; try { var htmlDoc = await storyProvider.LoadFromWebAsync(ctx); if (storyProvider.LastStatusCodeReceived != HttpStatusCode.OK) { throw new StoryProviderException(RequestFailReason.UnexpectedResponseStatusCode, storyProvider); } var nodes = htmlDoc.DocumentNode.SelectNodes("//div").Where(n => n.HasClass("panel_normal")); if (nodes.Any()) { throw new StoryProviderException(RequestFailReason.UnexpectedResponseContent, storyProvider); } var chapterData = new StoryChapter { ChapterSeq = chapterNo, HtmlContent = htmlDoc.GetElementbyId("storytextp").OuterHtml }; return(Request.Headers["Accept"].FirstOrDefault()?.Split(',').FirstOrDefault() == "text/html" ? Ok(chapterData.HtmlContent) : Ok(chapterData)); } catch (Exception ex) { switch (ex) { case OperationCanceledException _: case StoryProviderException _: return(BadRequest(ex)); default: throw; } } }
//[SwaggerResponse(200, "", typeof(IEnumerable<IndexResult>))] //[SwaggerResponse(400, "", typeof(ErrorResponse))] //[SwaggerResponse(400, "", typeof(WeatherForecast))] public async Task <IActionResult> FindStories([FromQuery] string keywords, [FromQuery] int page = 1, CancellationToken ctx = default) { const string storyProviderName = "FanFiction.Net"; const int fetchOperationTimeoutMilliSeconds = 4500; const string providerUrl = "https://www.fanfiction.net"; var endpointFragment = $"/search/?ready=1&keywords={keywords}&type=story&ppage={page}"; var storyProvider = new StoryProvider { BaseUri = new Uri(providerUrl), UriFragment = new Uri(endpointFragment, UriKind.Relative), FetchRequestTimeoutMilliSeconds = fetchOperationTimeoutMilliSeconds, Name = storyProviderName }; try { var htmlDoc = await storyProvider.LoadFromWebAsync(ctx); if (storyProvider.LastStatusCodeReceived != HttpStatusCode.OK) { throw new StoryProviderException(RequestFailReason.UnexpectedResponseStatusCode, storyProvider); } var nodes = htmlDoc.DocumentNode.SelectNodes("//div").Where(n => n.HasClass("z-list")); var stories = nodes.Select((node, index) => new IndexResult { Content = node.InnerHtml, Id = index }); return(stories.Any() ? Ok(stories) : throw new StoryProviderException(RequestFailReason.UnexpectedResponseContent, storyProvider)); } catch (Exception ex) { switch (ex) { case OperationCanceledException _: case StoryProviderException _: return(BadRequest(ex)); default: throw; } } }
public Story Get(Guid id) { return(StoryProvider.GetStory(id)); }
public Story GetLatest() { return(StoryProvider.GetLatest()); }
public IEnumerable <Story> Get() { return(StoryProvider.GetStories()); }
public int Run() { return(Handler.HandleStories(StoryProvider.GetStories()).Failed); }