Procházet zdrojové kódy

update alpha-0.0.1

Signed-off-by: grayzhao <admin@grayzhao.com>
grayzhao před 3 roky
rodič
revize
fc9f97ae8c
7 změnil soubory, kde provedl 8474 přidání a 2 odebrání
  1. 104 0
      ETagConverter.pm
  2. 29 2
      README.md
  3. 8296 0
      db.text.json
  4. binární
      img/img-01.png
  5. binární
      img/img-02.png
  6. binární
      logo.png
  7. 45 0
      main.pl

+ 104 - 0
ETagConverter.pm

@@ -0,0 +1,104 @@
+package LANraragi::Plugin::Scripts::ETagConverter;
+
+use strict;
+use warnings;
+no warnings 'uninitialized';
+use utf8;
+use LANraragi::Utils::Logging qw(get_plugin_logger);
+use LANraragi::Utils::Database qw(redis_decode redis_encode invalidate_cache);
+use LANraragi::Model::Config;
+use Mojo::JSON qw(decode_json encode_json);
+
+#Meta-information about your plugin.
+sub plugin_info {
+
+    return (
+        #Standard metadata
+        name        => "E-Hentai Tags Converter",
+        type        => "script",
+        namespace   => "etagconver",
+        author      => "GrayZhao & Guerra24",
+        version     => "1.0",
+        description => "将原来自 E-Hentai 的英文标签转换为中文标签<br/><strong style='color:red'>警告!!! 本插件尚在测试阶段,为了您的数据安全,使用前请一定要备份数据库!</strong>",
+        icon        =>
+          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAZxJREFUOE+tVNFRAjEU3HSAHWAFagW6aUCpQDsAKlA70ArUCrSCe0cFagXSgVBBnM0kmbtw58AM74fhvWTfy+6+czhyuCE8M7sCsCa5PrTfGGAIIay89wIuYWYTAPOcCCG03vtV90wENLMpgJdOQUAbAF8ptyE5S5NbNfWHajmXAQVQH+zdI9ltrgEmIYSFc+4SAEm2ulADxoKZlSc3TdPqUgasKLgB8A7gkeTDMQDPAXz+B/gqdQGom371/w7AdGjCxP9C50iK850nj7qkC2hmTwDOAMwyUE+U1KlrEZH47ZxTd4VUjoonR/yk/JKkwEsc5MMEKIB5CGHrnPsleboP4AcA+Usc9qJpGnG1cc7pjExeLFM4TJ21Bbckn8eINDMJpAVYqiEAPf2NpPIxypPNTMreA7jIfA1MFz2ZNkiTZt5PeiqnCTOglFP3XlRi1OUiTnfCvH5tCEHEi6dtR90oRs2ZOO2K01PZzDTZddU+kp7F8N5rj0skT5ZGO7ZJX5TMjXiKW5A4bvNHICMmKiRKrA36cEzlffJHB/wDWGrwFa3VL0wAAAAASUVORK5CYII=",
+        parameters => [
+            {
+                type => "string",
+                desc => "EhTagTranslation项目的JSON数据库文件(db.text.json)的绝对路径"
+            },
+        ]
+    );
+
+}
+
+# Mandatory function to be implemented by your script
+sub run_script {
+    shift;
+    my $lrr_info = shift;     # Global info hash
+    my ($db_path) = @_;       # Plugin parameters
+
+    my $logger = get_plugin_logger();
+    my $redis  = LANraragi::Model::Config->get_redis;
+
+    my @keys = $redis->keys('????????????????????????????????????????'); #40-character long keys only => Archive IDs
+
+    # 计数
+    my $count = 0;
+
+    # 打开本地JSON数据库
+    my $json_text = do {
+        open( my $json_fh, "<", $db_path )
+          or $logger->debug("Can't open $db_path: $!\n");
+        local $/;
+        <$json_fh>;
+    };
+    my $json   = decode_json($json_text);
+    my $target = $json->{'data'};
+
+    #Parse the archive list and add them to JSON.
+    foreach my $id (@keys) {
+
+        my %hash = $redis->hgetall($id);
+        my ($tags) = redis_decode(@hash{qw(tags)});
+
+        # 替换原有 category 为 reclass
+        $tags =~ s/category/reclass/g;
+        # 将字符串转为数组,并且去除字符串前后空格
+        my @list = map { s/^\s+|\s+$//g; $_ } split( /,/, $tags );
+
+        for my $item (@list) {
+            my ( $namespace, $word ) = split( /:/, $item );
+            for my $element (@$target) {
+
+                # 如果$namespace与'namespace'字段相同,则进行替换
+                if ( $element->{'namespace'} eq $namespace ) {
+                    my $name = $element->{'frontMatters'}->{'name'};
+                    $item =~ s/$namespace/$name/;
+                    my $data = $element->{'data'};
+
+                    # 如果在'data'字段中存在$key,则进行替换
+                    if ( exists $data->{$word} ) {
+                        my $value = $data->{$word}->{'name'};
+                        $item =~ s/$word/$value/;
+                    }
+                    last;
+                }
+            }
+        }
+
+        $count++;
+        # 将数组重新拼接为字符串
+        my $ehtags = join( ', ', @list );
+        $logger->info("Sending the following tags to LRR: $ehtags");
+
+        $redis->hset( $id, "tags", redis_encode($ehtags) );
+    }
+
+    invalidate_cache();
+    $redis->quit();
+
+    return ( modified => $count, message => "标签转换已完成..." );
+}
+
+1;

+ 29 - 2
README.md

@@ -1,3 +1,30 @@
-# ETagConverter
+# ETagConverter - LANraragi 英文标签批量翻译脚本
 
-这是一个适用于LANraragi的脚本插件,功能是将数据库中的来自E-Hentai上的英文标签批量翻译为中文标签。
+这是一个适用于LANraragi的脚本插件,功能是将数据库中的来自E-Hentai上的英文标签批量翻译为中文标签。
+
+## 简介
+该脚本参考Guerra24编写的nHentai Source Converter脚本进行编写,结合EhTagTranslation项目提供的数据库,批量翻译来自E-Hentai插件搜刮的英文标签为中文标签。
+
+该脚本是在ChatGPT帮助下开发的(我没有Perl编程基础,只简单了解其基本语法),所以可能会有不明BUG出现,还请给位见谅。若遇到相关问题可以提交Issues,我会尝试去解决。也欢迎各位大佬帮助完善该插件,在此谢谢诸位😃
+
+该脚本是[Difegue / LANraragi](https://github.com/Difegue/LANraragi)项目的脚本插件,同样也适用于[uparrows/LANraragi_cn](https://github.com/uparrows/LANraragi_cn)项目。
+
+## 使用方法(Docker为例)
+**P.S. <font color="red">该脚本在执行过程中会操作数据库,为了您的数据安全,在此强烈建议您备份原有数据库!!!</font>**
+
+1. 下载脚本
+2. 上传脚本至LANraragi
+3. 下载最新的[EhTagTranslation/Database](https://github.com/EhTagTranslation/Database/releases)中文标签数据库`db.text.json`,并放置在`LANraragi`镜像的`database`目录下
+4. 打开该脚本配置,填写中文标签数据库绝对路径
+    ![img-01.png](./img/img-01.png)
+    + 官方Docker镜像的用户,路径可填写`/home/koyomi/lanraragi/database/db.text.json`
+    + **浅笑一夏**大佬汉化Docker镜像的用户,路径可填写`/root/lanraragi/database/db.text.json`
+5. 保存脚本配置
+6. 点击"触发脚本",执行脚本
+
+## 预览
+![img-02.png](./img/img-02.png)
+
+## 感谢支持
++ Guerra24大佬编写的nHentai Source Converter脚本
++ [EhTagTranslation](https://github.com/EhTagTranslation)项目

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 8296 - 0
db.text.json


binární
img/img-01.png


binární
img/img-02.png


binární
logo.png


+ 45 - 0
main.pl

@@ -0,0 +1,45 @@
+use strict;
+use warnings;
+use JSON;
+
+sub process_json_data {
+    my ($tags, $file_path) = @_;
+    my $filename = $file_path; # json 文件的路径
+    my $json_text = do {
+        open(my $json_fh, "<", $filename)
+            or die("Can't open $filename: $!\n");
+        local $/;
+        <$json_fh>
+    };
+    my $json = decode_json($json_text);
+    my $target = $json->{'data'};
+
+    my @list = map { s/^\s+|\s+$//g; $_ } split( /,/, $tags );
+
+    for my $item (@list) {
+        my ($namespace, $key) = split(/:/, $item);
+        for my $element (@$target) {
+            # 如果$namespace与'namespace'字段相同,则进行替换
+            if ($element->{'namespace'} eq $namespace) {
+                my $name = $element->{'frontMatters'}->{'name'};
+                $item =~ s/$namespace/$name/;
+                my $data = $element->{'data'};
+                # 如果在'data'字段中存在$key,则进行替换
+                if (exists $data->{$key}) {
+                    my $value = $data->{$key}->{'name'};
+                    $item =~ s/$key/$value/;
+                }
+                last;
+            }
+        }
+    }
+    
+    return @list;
+}
+
+
+my $tags = "artist:gentsuki, female:ponytail, female:schoolgirl uniform, other:no penetration";
+my $file_path = "ETagConverter/db.text.json";
+my @result = process_json_data($tags, $file_path);
+print join(", ", @result), "\n";
+# 输出 "艺术家:2"

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů