mirror of
https://github.com/CakesTwix/Smakolykytl2Epub.git
synced 2025-01-01 22:21:36 -05:00
core: Cleanup Code
This commit is contained in:
parent
4be374c6ec
commit
146eb8dfdb
9 changed files with 84 additions and 47 deletions
|
@ -24,4 +24,3 @@ public class Books
|
|||
{
|
||||
public List<Book> books { get; set; }
|
||||
}
|
||||
|
||||
|
|
|
@ -4,4 +4,3 @@ public class Chapters
|
|||
{
|
||||
public Chapter chapter { get; set; }
|
||||
}
|
||||
|
||||
|
|
|
@ -42,4 +42,3 @@ public class Tag
|
|||
public int id { get; set; }
|
||||
public string title { get; set; }
|
||||
}
|
||||
|
||||
|
|
15
Program.cs
15
Program.cs
|
@ -1,39 +1,36 @@
|
|||
using System.Text;
|
||||
using EpubSharp;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Smakolykytl2Epub.Models;
|
||||
using EpubSharp;
|
||||
using Smakolykytl2Epub.Utils;
|
||||
|
||||
var client = new HttpClient();
|
||||
|
||||
|
||||
|
||||
var projectTitle = await Ranobe.GetById(int.Parse(args[0]));
|
||||
if (projectTitle != null)
|
||||
{
|
||||
// Print
|
||||
Project project = projectTitle.project;
|
||||
var project = projectTitle.project;
|
||||
Console.WriteLine(project.title);
|
||||
Console.WriteLine(project.alternatives);
|
||||
Console.WriteLine(project.description);
|
||||
|
||||
// Basic Info
|
||||
EpubWriter writer = new EpubWriter();
|
||||
var writer = new EpubWriter();
|
||||
writer.AddAuthor(project.author);
|
||||
writer.SetTitle(project.title);
|
||||
|
||||
// Add Cover Image
|
||||
using (var response = await client.GetAsync(project.image.url))
|
||||
{
|
||||
byte[] imageBytes = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
|
||||
var imageBytes = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
|
||||
writer.SetCover(imageBytes, ImageFormat.Png);
|
||||
}
|
||||
|
||||
var books = (await Ranobe.GetChaptersById(int.Parse(args[0])))?.books[int.Parse(args[1]) - 1];
|
||||
if (books != null)
|
||||
foreach (var item in books.chapters)
|
||||
{
|
||||
Console.WriteLine(item.title);
|
||||
var content = ((await Ranobe.GetChapterById(item.id))!).chapter.content;
|
||||
var content = (await Ranobe.GetChapterById(item.id))!.chapter.content;
|
||||
writer.AddChapter(item.title, HtmlConverter.ConvertJsonToHtml(content));
|
||||
Thread.Sleep(1000);
|
||||
}
|
||||
|
|
10
README.md
10
README.md
|
@ -1,14 +1,11 @@
|
|||
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/logo.png" width="256px"/><br>
|
||||
</p>
|
||||
|
||||
|
||||
# Smakolykytl2Epub [![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)](https://opensource.org/licenses/)
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/github/languages/code-size/CakesTwix/cloudstream-extensions-uk?style=for-the-badge"/>
|
||||
<img src="https://img.shields.io/github/languages/code-size/CakesTwix/Smakolykytl2Epub?style=for-the-badge"/>
|
||||
<img src="https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black"/>
|
||||
<img src="https://img.shields.io/badge/Rider-000000.svg?style=for-the-badge&logo=Rider&logoColor=white&color=black&labelColor=crimson"/>
|
||||
<img src="https://img.shields.io/badge/c%23-%23239120.svg?style=for-the-badge&logo=c-sharp&logoColor=white"/>
|
||||
|
@ -28,6 +25,7 @@
|
|||
# Завантажити перший том
|
||||
./Smakolykytl2Epub 2 1
|
||||
```
|
||||
|
||||
```
|
||||
┌─[cakestwix@arch] - [...] - [Sun Aug 13, 14:11]
|
||||
└─[$]> ./Smakolykytl2Epub 2 1
|
||||
|
@ -44,14 +42,10 @@ Solo Leveling / Only I Level Up / 나 혼자만 레벨업НАЙСЛАБШИЙ М
|
|||
...
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
## Authors
|
||||
|
||||
- [@CakesTwix](https://www.github.com/CakesTwix)
|
||||
|
||||
|
||||
## License
|
||||
|
||||
- [GPL-v3](https://choosealicense.com/licenses/gpl-3.0/)
|
||||
|
|
58
README.md.backup
Normal file
58
README.md.backup
Normal file
|
@ -0,0 +1,58 @@
|
|||
|
||||
|
||||
<p align="center">
|
||||
<img src="assets/logo.png" width="256px"/><br>
|
||||
</p>
|
||||
|
||||
|
||||
# Smakolykytl2Epub [![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)](https://opensource.org/licenses/)
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/github/languages/code-size/CakesTwix/cloudstream-extensions-uk?style=for-the-badge"/>
|
||||
<img src="https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black"/>
|
||||
<img src="https://img.shields.io/badge/Rider-000000.svg?style=for-the-badge&logo=Rider&logoColor=white&color=black&labelColor=crimson"/>
|
||||
<img src="https://img.shields.io/badge/c%23-%23239120.svg?style=for-the-badge&logo=c-sharp&logoColor=white"/>
|
||||
<img src="https://img.shields.io/badge/.NET-5C2D91?style=for-the-badge&logo=.net&logoColor=white"/><br><br>
|
||||
<a href="https://www.buymeacoffee.com/cakestwix"><img width="150" src="https://img.buymeacoffee.com/button-api/?text=Buy me a tea&emoji=🍵&slug=cakestwix&button_colour=FF5F5F&font_colour=ffffff&font_family=Poppins&outline_colour=000000&coffee_colour=FFDD00" /></a>
|
||||
</p>
|
||||
|
||||
Консольний додаток, що дає змогу конвертувати книгу зі smakolykytl.site в Epub
|
||||
|
||||
## Usage/Examples
|
||||
|
||||
```bash
|
||||
# ./Smakolykytl2Epub Айді_тайтла Номер_тому
|
||||
# 2
|
||||
# https://smakolykytl.site/titles/2
|
||||
# 1
|
||||
# Завантажити перший том
|
||||
./Smakolykytl2Epub 2 1
|
||||
```
|
||||
```
|
||||
┌─[cakestwix@arch] - [...] - [Sun Aug 13, 14:11]
|
||||
└─[$]> ./Smakolykytl2Epub 2 1
|
||||
Лиш я прокачаю свій рівень
|
||||
Solo Leveling / Only I Level Up / 나 혼자만 레벨업НАЙСЛАБШИЙ МИСЛИВЕЦЬ У СВІТІ!
|
||||
У мисливця Е-рангу Сон Джин-У немає ні грошей, ні таланту, ні перспектив, про які можна було б говорити. Й вочевидь, йому також не щастить! Коли одного доленосного дня він потрапляє в приховане подвійне підземелля, його покидає група та залишає помирати від рук найжахливіших монстрів, яких він коли-небудь зустрічав.
|
||||
Але перед останнім, смертельним ударом…
|
||||
|
||||
Дзінь!
|
||||
|
||||
[Вітаю, ви стали Гравцем.]
|
||||
Пролог
|
||||
Мисливець E‑рангу
|
||||
...
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
## Authors
|
||||
|
||||
- [@CakesTwix](https://www.github.com/CakesTwix)
|
||||
|
||||
|
||||
## License
|
||||
|
||||
- [GPL-v3](https://choosealicense.com/licenses/gpl-3.0/)
|
||||
|
|
@ -8,9 +8,9 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AngleSharp" Version="1.0.4" />
|
||||
<PackageReference Include="EpubSharp.dll" Version="1.1.5" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="AngleSharp" Version="1.0.4"/>
|
||||
<PackageReference Include="EpubSharp.dll" Version="1.1.5"/>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using AngleSharp.Common;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
|
@ -28,30 +25,25 @@ public class HtmlConverter
|
|||
{
|
||||
public static string ConvertJsonToHtml(string json)
|
||||
{
|
||||
JToken token = JToken.Parse(json);
|
||||
var token = JToken.Parse(json);
|
||||
return ConvertTokenToHtml(token);
|
||||
}
|
||||
|
||||
private static string ConvertTokenToHtml(JToken token)
|
||||
{
|
||||
string html = "";
|
||||
var html = "";
|
||||
|
||||
if (token is JArray)
|
||||
{
|
||||
foreach (JToken childToken in token.Children())
|
||||
{
|
||||
html += ConvertTokenToHtml(childToken);
|
||||
|
||||
}
|
||||
foreach (var childToken in token.Children()) html += ConvertTokenToHtml(childToken);
|
||||
}
|
||||
else if (token is JObject)
|
||||
{
|
||||
TextJson? text = JsonConvert.DeserializeObject<TextJson>(token.ToString());
|
||||
var text = JsonConvert.DeserializeObject<TextJson>(token.ToString());
|
||||
foreach (var str in text?.content!)
|
||||
{
|
||||
if (str.type == "hardBreak") html += "<br>";
|
||||
html += str.text;
|
||||
|
||||
}
|
||||
|
||||
html += "<br>";
|
||||
|
|
|
@ -1,18 +1,17 @@
|
|||
using Smakolykytl2Epub.Models;
|
||||
using Newtonsoft.Json;
|
||||
using JsonSerializer = System.Text.Json.JsonSerializer;
|
||||
using Smakolykytl2Epub.Models;
|
||||
|
||||
namespace Smakolykytl2Epub.Utils;
|
||||
|
||||
public class Ranobe
|
||||
{
|
||||
private static readonly HttpClient Client = new HttpClient();
|
||||
private const string ApiUrl = "https://api.smakolykytl.site/api/user/";
|
||||
private const string SiteUrl = "https://smakolykytl.site/";
|
||||
private static readonly HttpClient Client = new();
|
||||
|
||||
public static async Task<Projects?> GetById(int id)
|
||||
{
|
||||
var response = await Client.GetAsync(ApiUrl + "projects/" + id.ToString());
|
||||
var response = await Client.GetAsync(ApiUrl + "projects/" + id);
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
// Console.WriteLine(content);
|
||||
return JsonConvert.DeserializeObject<Projects>(content);
|
||||
|
@ -20,7 +19,7 @@ public class Ranobe
|
|||
|
||||
public static async Task<Books?> GetChaptersById(int id)
|
||||
{
|
||||
var response = await Client.GetAsync(ApiUrl + "projects/" + id.ToString() + "/books");
|
||||
var response = await Client.GetAsync(ApiUrl + "projects/" + id + "/books");
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
// Console.WriteLine(content);
|
||||
return JsonConvert.DeserializeObject<Books>(content);
|
||||
|
@ -28,7 +27,7 @@ public class Ranobe
|
|||
|
||||
public static async Task<Chapters?> GetChapterById(int id)
|
||||
{
|
||||
var response = await Client.GetAsync(ApiUrl + "chapters/" + id.ToString());
|
||||
var response = await Client.GetAsync(ApiUrl + "chapters/" + id);
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
// Console.WriteLine(content);
|
||||
return JsonConvert.DeserializeObject<Chapters>(content);
|
||||
|
|
Loading…
Reference in a new issue