浏览代码

feat: add hyperlink support for search terms and ASIN columns

Your Name (aider) 1 年之前
父节点
当前提交
d1640a0944
共有 2 个文件被更改,包括 42 次插入21 次删除
  1. 25 11
      brand_add_url_link.py
  2. 17 10
      translate_new_col.py

+ 25 - 11
brand_add_url_link.py

@@ -3,20 +3,31 @@ from urllib.parse import quote
 
 def create_hyperlink(value, base_url):
     """为给定的值创建亚马逊搜索页面的超链接"""
-    return f'=HYPERLINK("{base_url}{quote(value)}&__mk_zh_CN=%E4%BA%9A%E9%A9%BC%E9%80%8A%E7%BD%91%E7%AB%99", "{value}")'
+    return f'=HYPERLINK("{base_url}{quote(value)}&__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99", "{value}")'
 
-def process_row(row, indices, base_url):
+def create_asin_link(asin):
+    """为ASIN创建产品详情页链接"""
+    return f'=HYPERLINK("https://www.amazon.co.jp/dp/{asin}", "{asin}")'
+
+def process_row(row, brand_indices, asin_indices, base_url):
     """为指定索引的单元格添加超链接"""
-    for index in indices:
+    # 处理品牌列
+    for index in brand_indices:
         if index < len(row):  # 确保索引在范围内
             row[index] = create_hyperlink(row[index], base_url)
+    
+    # 处理ASIN列
+    for index in asin_indices:
+        if index < len(row) and row[index]:  # 确保索引在范围内且值不为空
+            row[index] = create_asin_link(row[index])
+    
     return row
 
 def column_letter_to_index(col_letter):
     """将Excel列字母转换为0基索引"""
     return sum((ord(c) - ord('A') + 1) * (26 ** i) for i, c in enumerate(reversed(col_letter.upper()))) - 1
 
-def read_and_process_csv(input_file, output_file, columns_to_process, use_letters=False, base_url='', start_row=0):
+def read_and_process_csv(input_file, output_file, brand_columns, asin_columns, use_letters=False, base_url='', start_row=0):
     """读取CSV文件并处理指定列的数据,然后写入新文件"""
     with open(input_file, 'r', encoding='utf-8', errors='ignore') as csvfile, \
             open(output_file, 'w', newline='', encoding='utf-8') as new_csvfile:
@@ -30,25 +41,28 @@ def read_and_process_csv(input_file, output_file, columns_to_process, use_letter
 
         # 获取要处理的列的索引
         if use_letters:  # 如果使用列字母
-            indices = [column_letter_to_index(col) for col in columns_to_process]
+            brand_indices = [column_letter_to_index(col) for col in brand_columns]
+            asin_indices = [column_letter_to_index(col) for col in asin_columns]
         else:  # 如果使用列索引(假设从0开始)
-            indices = [int(col) for col in columns_to_process]
+            brand_indices = [int(col) for col in brand_columns]
+            asin_indices = [int(col) for col in asin_columns]
 
         # 遍历每一行并处理
         for i, row in enumerate(reader):
             if i < start_row:
                 writer.writerow(row)  # 直接写入未处理的行
             else:
-                processed_row = process_row(row, indices, base_url)
+                processed_row = process_row(row, brand_indices, asin_indices, base_url)
                 writer.writerow(processed_row)
 
 # 定义要处理的CSV文件路径、输出文件路径以及需要添加超链接的列索引或列字母和亚马逊搜索的基础URL
-input_csv_path = 'C:\\Users\\74262\\Desktop\\excel\\18.JP家具.csv'
-output_csv_path = 'C:\\Users\\74262\\Desktop\\excel\\18.JP家具_processed.csv'
-columns_to_process = ['C', 'D', 'E']  # 使用列字母
+input_csv_path = '测试.csv'
+output_csv_path = '测试_processed.csv'
+brand_columns = ['C', 'D', 'E']  # 品牌列
+asin_columns = ['H', 'L', 'P']   # ASIN列
 use_letters = True  # 是否使用列字母代替索引
 amazon_search_base_url = 'https://www.amazon.co.jp/s?k='
 start_row = 1  # 从第2行开始处理(索引从0开始)
 
 # 执行CSV处理
-read_and_process_csv(input_csv_path, output_csv_path, columns_to_process, use_letters, amazon_search_base_url, start_row)
+read_and_process_csv(input_csv_path, output_csv_path, brand_columns, asin_columns, use_letters, amazon_search_base_url, start_row)

+ 17 - 10
translate_new_col.py

@@ -1,11 +1,16 @@
 import os
 import csv
 from ai_trans import translate_sentences
+from urllib.parse import quote
 
 # 设置 OpenAI API 配置
 os.environ['OPENAI_API_KEY'] = 'sk-NscqaCD1PfVm7soEF3C3E6297bE14d7fB595Be8f17F39aFf'
 os.environ['OPENAI_API_BASE'] = 'https://aiapi.magong.site/v1'
 
+def create_search_link(value):
+    """为搜索词创建亚马逊搜索链接"""
+    return f'=HYPERLINK("https://www.amazon.co.jp/s?k={quote(value)}", "{value}")'
+
 def read_csv(file_path):
     """读取CSV文件并返回数据列表"""
     encodings = ['utf-8', 'latin-1', 'gbk']
@@ -23,17 +28,12 @@ def read_csv(file_path):
     print("Failed to read CSV file with any of the specified encodings.")
     return []
 
-
 def insert_empty_column(data, column_index):
     """在指定列之后插入一个空列"""
     for row in data:
         row.insert(column_index + 1, '')  # 插入在目标列后面
     return data
 
-
-
-
-
 def translate_column(data, column_index, start_row=0, target_language='zh'):
     """
     翻译指定列的文本,并将结果保存到下一列
@@ -62,6 +62,12 @@ def translate_column(data, column_index, start_row=0, target_language='zh'):
     
     return data
 
+def add_search_links(data, column_index, start_row=0):
+    """为搜索词列添加超链接"""
+    for i, row in enumerate(data[start_row:], start=start_row):
+        if len(row) > column_index:
+            row[column_index] = create_search_link(row[column_index])
+    return data
 
 def save_csv(data, file_path):
     """将数据保存为CSV文件"""
@@ -72,7 +78,6 @@ def save_csv(data, file_path):
     except Exception as e:
         print(f"Error saving CSV file: {e}")
 
-
 def process_csv(input_file, output_file, column_index, start_row=0, target_language='zh'):
     """处理CSV文件的主要函数"""
     data = read_csv(input_file)
@@ -83,14 +88,16 @@ def process_csv(input_file, output_file, column_index, start_row=0, target_langu
     # 翻译第二列的文本并保存到下一列
     data = translate_column(data, column_index, start_row, target_language)
 
+    # 为搜索词添加超链接
+    data = add_search_links(data, column_index, start_row)
+
     # 保存为新文件
     save_csv(data, output_file)
 
-
 if __name__ == "__main__":
-    input_file = "18.JP家具 - 小的.csv"
-    output_file = "18.JP家具 - 小的_processed.csv"
+    input_file = "测试.csv"
+    output_file = "测试_processed.csv"
     column_index = 1  # 插入空列的列索引(第2列)
     start_row = 2  # 从第2行开始翻译(通常第0行是标题)
 
-    process_csv(input_file, output_file, column_index, start_row)
+    process_csv(input_file, output_file, column_index, start_row)