File size: 4,683 Bytes
1682796
 
cab7d6c
1682796
cab7d6c
1682796
cab7d6c
ba68698
1682796
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cab7d6c
1682796
 
cab7d6c
1682796
 
cab7d6c
1682796
cab7d6c
1682796
 
 
 
 
 
 
cab7d6c
1682796
 
 
 
 
 
 
 
 
 
 
 
38d56f7
1682796
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cab7d6c
1682796
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import configparser
import pandas as pd
import streamlit as st
import base64
import sqlite3
import os


# 获取当前文件目录
current_dir = os.path.dirname(os.path.abspath(__file__))

# 构造数据库文件路径
rarbg_db_file = os.path.join(current_dir, 'rarbg_db.db')
rarbg_config_file = os.path.join(current_dir, 'rarbg_config.ini')

my_style = '''
<style>
    .tag {
        display: inline-block;
        padding: 2px 6px;
        background-color: #f2f2f2;  /* 默认的背景颜色 */
        border-radius: 5px;        /* 圆角效果 */
        margin: 0 2px;
        transition: background-color 0.3s;  /* 平滑的颜色过渡效果 */
    }

    .tag:hover {
        background-color: #cffd51;  /* 鼠标经过时的背景颜色 */
    }

    .tag:active {
        background-color: #cffd51;  /* 鼠标按下时的背景颜色 */
    }
</style>
'''

config = configparser.ConfigParser()
config.read(rarbg_config_file)
searches_value = config['searches']['value']


# 图片Base64
def image_to_base64(img_path):
    with open(img_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode()


# 连接数据库
def get_connection():
    conn = sqlite3.connect("rarbg_db.sqlite")
    return conn


def search_db(keyword):
    conn = get_connection()

    # Split keywords by space
    keywords = keyword.split()

    # Form the LIKE and NOT LIKE patterns
    conditions = []
    params = []

    for key in keywords:
        if key.startswith("-"):
            conditions.append("title NOT LIKE ?")
            params.append(f"%{key[1:]}%")
        else:
            conditions.append("title LIKE ?")
            params.append(f"%{key}%")

    # Construct the SQL query
    query = f"SELECT id, hash, title, dt, size FROM items WHERE {' AND '.join(conditions)}"

    df = pd.read_sql_query(query, conn, params=params)
    conn.close()
    return df


# 转换文件大小到GB
def convert_size(size_in_bytes):
    size_in_gb = size_in_bytes / (1024 * 1024 * 1024)
    return round(size_in_gb, 2)


# 下载搜索结果
def download_link(df, filename="search_results.csv"):
    csv = df.to_csv(index=False)
    b64 = base64.b64encode(csv.encode()).decode()
    href = f'<a href="data:file/csv;base64,{b64}" download="{filename}">下载搜索结果</a>'
    return href


st.set_page_config(page_title="RARBG Database Search", page_icon="🌞", layout='centered', initial_sidebar_state='auto')

# 首页
st.markdown(f'# <a href="https://www.rarbg.quest/" target="_self"><img src="data:image/jpeg;base64,{image_to_base64(os.path.join("rarbg.png"))}" alt="Image" width="48px" height="48px" style="border-radius: 8px; box-shadow: 3px 3px 10px rgba(0,0,0,0.1);"/></a> :rainbow[RARBG 数据库搜索]', unsafe_allow_html=True)

# 广告位图片
st.success(f'''#### 广告位
😭 接不到广告,我太穷了。请联系我 Telegram: @NervosCKB

用户搜索次数:{searches_value}''')

# 搜索框
keyword = st.text_input("输入搜索的关键词:")

# 搜索按钮
if st.button("Search"):
    if keyword:
        # 搜索数据库
        df = search_db(keyword)

        if not df.empty:
            # 处理结果
            df['hash'] = "magnet:?xt=urn:btih:" + df['hash']
            df['size'] = df['size'].apply(convert_size)
            df = df.rename(columns={'hash': '链接', 'title': '标题', 'size': '文件大小 (GB)', 'dt': '日期'})
            df = df[['标题', '链接', '文件大小 (GB)', '日期']]

            # 显示结果
            st.dataframe(df, hide_index=False, use_container_width=True)

            # 下载链接
            st.markdown(download_link(df), unsafe_allow_html=True)

            # 读取配置文件获取当前搜索次数
            config.read(rarbg_config_file)
            searches_value = int(config['searches']['value'])

            # 更新搜索次数
            config['searches']['value'] = str(searches_value + 1)

            # 写回配置文件
            with open(rarbg_config_file, 'w') as configfile:
                config.write(configfile)
        else:
            st.warning("没有找到记录。")
    else:
        st.error("请输入一些关键词。")

st.error('''#### 温馨提示
本站不提供任何包含反动、淫秽、色情、暴力、侮辱、诽谤等不良信息。当你浏览本网站时,请自觉遵守法律法规,对自己的行为承担全部责任。''')
st.info('''#### 使用说明
请在文本框内输入关键词,仅限英文,并点击搜索按钮进行查询。若需输入多个关键词,可用空格进行分隔;若希望某个关键词不在搜索结果中出现,可在关键词前加上 "-" 符号。''')