示例#1
0
        public WbTime?TryParsePubDate()
        {
            if (PubDate == null || PubDate.StartsWith('?'))
            {
                return(null);
            }
            if (DateTime.TryParse(PubDate, out var v))
            {
                return(WbTime.FromDateTime(v, WikibaseTimePrecision.Day));
            }
            var year = Convert.ToInt16(PubDate);

            return(WbTime.FromDateTime(new DateTime(year, 1, 1, 0, 0, 0, DateTimeKind.Utc), WikibaseTimePrecision.Year));
        }
        public async Task RunAsync()
        {
            var data = File.ReadLines(FileName).Select(l => l.Split('\t'))
                       .ToDictionary(f => f[0], f => (Author: f[1], Initiation: Convert.ToDateTime(f[2])));
            var entities = GatherEntitiesRoutine.Load();
            var arcs     = PopulateBooksRoutine.LoadBooks();

            foreach (var arc in arcs)
            {
                foreach (var vol in arc.Volumes)
                {
                    if (!data.TryGetValue(vol.Cn, out var info))
                    {
                        Logger.LogWarning("Missing: {Book}", vol.En);
                        continue;
                    }
                    var entity = new Entity(Site, vol.Id);
                    await entity.RefreshAsync(EntityQueryOptions.FetchClaims);

                    if (entity.Claims.ContainsKey("P22"))
                    {
                        Logger.LogInformation("Skipped: {Book}", vol.En);
                        continue;
                    }
                    Logger.LogInformation("Populate: {Book}", vol.En);
                    var entries = new List <EntityEditEntry>();
                    if (!string.IsNullOrEmpty(info.Author))
                    {
                        entries.Add(
                            new EntityEditEntry(nameof(entity.Claims),
                                                new Claim("P22", entities.IdFromName(info.Author), BuiltInDataTypes.WikibaseItem))
                            );
                    }
                    entries.Add(
                        new EntityEditEntry(nameof(entity.Claims),
                                            new Claim("P25",
                                                      WbTime.FromDateTime(info.Initiation, WikibaseTimePrecision.Day),
                                                      BuiltInDataTypes.Time))
                        );
                    await entity.EditAsync(entries, "Populate book information.");
                }
            }
        }