#438 ImportNaskbanGanjoorPoemMatchFindings
This commit is contained in:
parent
4aa9047404
commit
beb5c215a2
@ -569,5 +569,10 @@ namespace RMuseum.DbContext
|
||||
/// </summary>
|
||||
public DbSet<DiscoverQuotedQueueItem> DiscoverQuotedQueueItems { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// paper sources
|
||||
/// </summary>
|
||||
public DbSet<PaperSource> PaperSources { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
102
RMuseum/Models/PDFLibrary/GanjoorPoemMatchFinding.cs
Normal file
102
RMuseum/Models/PDFLibrary/GanjoorPoemMatchFinding.cs
Normal file
@ -0,0 +1,102 @@
|
||||
using System;
|
||||
|
||||
namespace RMuseum.Models.PDFLibrary
|
||||
{
|
||||
public class GanjoorPoemMatchFinding
|
||||
{
|
||||
/// <summary>
|
||||
/// id
|
||||
/// </summary>
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// cat id
|
||||
/// </summary>
|
||||
public int GanjoorCatId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// cat full title
|
||||
/// </summary>
|
||||
public string GanjoorCatFullTitle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// cat full url
|
||||
/// </summary>
|
||||
public string GanjoorCatFullUrl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// start from this poem
|
||||
/// </summary>
|
||||
public int GanjoorPoemId { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// book id
|
||||
/// </summary>
|
||||
public int BookId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// book title
|
||||
/// </summary>
|
||||
public string BookTitle { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// page number
|
||||
/// </summary>
|
||||
public int PageNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// threshold
|
||||
/// </summary>
|
||||
public int Threshold { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// queue time
|
||||
/// </summary>
|
||||
public DateTime QueueTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// started
|
||||
/// </summary>
|
||||
public bool Started { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// start time
|
||||
/// </summary>
|
||||
public DateTime? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// last update
|
||||
/// </summary>
|
||||
public DateTime? LastUpdate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// updated by user
|
||||
/// </summary>
|
||||
public Guid? LastUpdatedByUserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// current poem id
|
||||
/// </summary>
|
||||
public int CurrentPoemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// progress
|
||||
/// </summary>
|
||||
public int Progress { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// current page number
|
||||
/// </summary>
|
||||
public int CurrentPageNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// finished
|
||||
/// </summary>
|
||||
public bool Finished { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// finish time
|
||||
/// </summary>
|
||||
public DateTime? FinishTime { get; set; }
|
||||
}
|
||||
}
|
||||
@ -3508,6 +3508,11 @@
|
||||
discover quoted q items
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.PaperSources">
|
||||
<summary>
|
||||
paper sources
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Migrations.PictureFileExtUrl">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
@ -13076,6 +13081,101 @@
|
||||
Manuscript
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.Id">
|
||||
<summary>
|
||||
id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.GanjoorCatId">
|
||||
<summary>
|
||||
cat id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.GanjoorCatFullTitle">
|
||||
<summary>
|
||||
cat full title
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.GanjoorCatFullUrl">
|
||||
<summary>
|
||||
cat full url
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.GanjoorPoemId">
|
||||
<summary>
|
||||
start from this poem
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.BookId">
|
||||
<summary>
|
||||
book id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.BookTitle">
|
||||
<summary>
|
||||
book title
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.PageNumber">
|
||||
<summary>
|
||||
page number
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.Threshold">
|
||||
<summary>
|
||||
threshold
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.QueueTime">
|
||||
<summary>
|
||||
queue time
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.Started">
|
||||
<summary>
|
||||
started
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.StartTime">
|
||||
<summary>
|
||||
start time
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.LastUpdate">
|
||||
<summary>
|
||||
last update
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.LastUpdatedByUserId">
|
||||
<summary>
|
||||
updated by user
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.CurrentPoemId">
|
||||
<summary>
|
||||
current poem id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.Progress">
|
||||
<summary>
|
||||
progress
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.CurrentPageNumber">
|
||||
<summary>
|
||||
current page number
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.Finished">
|
||||
<summary>
|
||||
finished
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.GanjoorPoemMatchFinding.FinishTime">
|
||||
<summary>
|
||||
finish time
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.PDFLibrary.MultiVolumePDFCollection">
|
||||
<summary>
|
||||
Multi Volume Book
|
||||
@ -18068,6 +18168,22 @@
|
||||
<param name="naskbanUserName"></param>
|
||||
<param name="naskbanPassword"></param>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.ImportNaskbanGanjoorPoemMatchFindings(System.String,System.String)">
|
||||
<summary>
|
||||
import naskban ganjoor matchings
|
||||
</summary>
|
||||
<param name="naskbanUserName"></param>
|
||||
<param name="naskbanPassword"></param>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService._ImportNaskbanGanjoorPoemMatchFindingsAsync(RMuseum.DbContext.RMuseumDbContext,System.String,System.String)">
|
||||
<summary>
|
||||
import naskban ganjoor matchings
|
||||
</summary>
|
||||
<param name="context"></param>
|
||||
<param name="naskbanUserName"></param>
|
||||
<param name="naskbanPassword"></param>
|
||||
<returns>number of synched items</returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetPoetSuggestedSpecLinesAsync(System.Int32)">
|
||||
<summary>
|
||||
return list of suggested spec lines
|
||||
|
||||
@ -19,6 +19,7 @@ using RSecurityBackend.Models.Generic.Db;
|
||||
using RMuseum.Models.PDFLibrary;
|
||||
using DNTPersianUtils.Core;
|
||||
using System.Collections.Generic;
|
||||
using RMuseum.Migrations;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
@ -507,5 +508,118 @@ namespace RMuseum.Services.Implementation
|
||||
return new RServiceResult<bool>(false, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// import naskban ganjoor matchings
|
||||
/// </summary>
|
||||
/// <param name="naskbanUserName"></param>
|
||||
/// <param name="naskbanPassword"></param>
|
||||
public void ImportNaskbanGanjoorPoemMatchFindings(string naskbanUserName, string naskbanPassword)
|
||||
{
|
||||
_backgroundTaskQueue.QueueBackgroundWorkItem
|
||||
(
|
||||
async token =>
|
||||
{
|
||||
using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions<RMuseumDbContext>())) //this is long running job, so _context might be already been freed/collected by GC
|
||||
{
|
||||
LongRunningJobProgressServiceEF jobProgressServiceEF = new LongRunningJobProgressServiceEF(context);
|
||||
var job = (await jobProgressServiceEF.NewJob("ImportNaskbanGanjoorPoemMatchFindings", "Query data")).Result;
|
||||
var res = await _ImportNaskbanGanjoorPoemMatchFindingsAsync(context, naskbanUserName, naskbanPassword);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", false, res.ExceptionString);
|
||||
}
|
||||
else
|
||||
{
|
||||
await jobProgressServiceEF.UpdateJob(job.Id, 100, "", true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// import naskban ganjoor matchings
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
/// <param name="naskbanUserName"></param>
|
||||
/// <param name="naskbanPassword"></param>
|
||||
/// <returns>number of synched items</returns>
|
||||
private async Task<RServiceResult<int>> _ImportNaskbanGanjoorPoemMatchFindingsAsync(RMuseumDbContext context, string naskbanUserName, string naskbanPassword)
|
||||
{
|
||||
try
|
||||
{
|
||||
LoggedOnUserModelEx loggedOnUser;
|
||||
using (HttpClient client = new HttpClient())
|
||||
{
|
||||
LoginViewModel loginViewModel = new LoginViewModel()
|
||||
{
|
||||
Username = naskbanUserName,
|
||||
Password = naskbanPassword,
|
||||
ClientAppName = "Ganjoor API",
|
||||
Language = "fa-IR"
|
||||
};
|
||||
var loginResponse = await client.PostAsync("https://api.naskban.ir/api/users/login", new StringContent(JsonConvert.SerializeObject(loginViewModel), Encoding.UTF8, "application/json"));
|
||||
|
||||
if (loginResponse.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
return new RServiceResult<int>(0, "login error: " + JsonConvert.DeserializeObject<string>(await loginResponse.Content.ReadAsStringAsync()));
|
||||
}
|
||||
loggedOnUser = JsonConvert.DeserializeObject<LoggedOnUserModelEx>(await loginResponse.Content.ReadAsStringAsync());
|
||||
}
|
||||
|
||||
|
||||
using (HttpClient secureClient = new HttpClient())
|
||||
{
|
||||
secureClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", loggedOnUser.Token);
|
||||
var unsyncedResponse = await secureClient.GetAsync("https://api.naskban.ir/api/pdf/ganjoor/matching");
|
||||
if (!unsyncedResponse.IsSuccessStatusCode)
|
||||
{
|
||||
return new RServiceResult<int>(0, "unsync error: " + JsonConvert.DeserializeObject<string>(await unsyncedResponse.Content.ReadAsStringAsync()));
|
||||
}
|
||||
var matchings = JsonConvert.DeserializeObject<GanjoorPoemMatchFinding[]>(await unsyncedResponse.Content.ReadAsStringAsync());
|
||||
foreach (var matching in matchings)
|
||||
{
|
||||
if (false == await context.PaperSources.Where(p => p.NaskbanBookId == matching.BookId).AnyAsync())
|
||||
{
|
||||
HttpResponseMessage responseBook = await secureClient.GetAsync($"https://api.naskban.ir/api/pdf/{matching.BookId}?includePages=false&includeBookText=false&includePageText=false");
|
||||
if (responseBook.StatusCode != HttpStatusCode.OK)
|
||||
{
|
||||
return new RServiceResult<int>(0, $"book fetch error bookid = {matching.BookId} matching id = {matching.Id} - " + JsonConvert.DeserializeObject<string>(await responseBook.Content.ReadAsStringAsync()));
|
||||
}
|
||||
responseBook.EnsureSuccessStatusCode();
|
||||
|
||||
var book = JsonConvert.DeserializeObject<PDFBook>(await responseBook.Content.ReadAsStringAsync());
|
||||
var cat = await context.GanjoorCategories.AsNoTracking().Where(c => c.Id == matching.GanjoorCatId).SingleAsync();
|
||||
PaperSource paperSource = new PaperSource()
|
||||
{
|
||||
GanjoorPoetId = cat.PoetId,
|
||||
GanjoorCatId = matching.GanjoorCatId,
|
||||
GanjoorCatFullTitle = matching.GanjoorCatFullTitle,
|
||||
GanjoorCatFullUrl = matching.GanjoorCatFullUrl,
|
||||
BookType = LinkType.Naskban,
|
||||
BookFullUrl = $"https://naskban.ir/{matching.BookId}",
|
||||
NaskbanBookId = matching.BookId,
|
||||
BookFullTitle = matching.BookTitle,
|
||||
CoverThumbnailImageUrl = book.ExtenalCoverImageUrl,
|
||||
Description = "",
|
||||
IsTextOriginalSource = false,
|
||||
MatchPercent = 0,
|
||||
HumanReviewed = false,
|
||||
};
|
||||
context.PaperSources.Add(paperSource);
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
var logoutUrl = $"https://api.naskban.ir/api/users/delsession?userId={loggedOnUser.User.Id}&sessionId={loggedOnUser.SessionId}";
|
||||
await secureClient.DeleteAsync(logoutUrl);
|
||||
return new RServiceResult<int>(matchings.Length);
|
||||
}
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<int>(0, exp.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user