├── .github └── workflows │ └── translate.yml ├── .gitignore ├── LICENSE ├── README.French.md ├── README.md ├── README.zh-CN.md ├── README.zh-TW.md ├── chatgpt_linebot ├── __init__.py ├── memory.py ├── modules │ ├── __init__.py │ ├── business_channel.py │ ├── chat.py │ ├── gpt.py │ ├── horoscope.py │ ├── image_crawler.py │ ├── image_generate.py │ └── youtube_recommend.py ├── prompts │ ├── __init__.py │ └── template.py └── urls.py ├── config.py ├── data ├── cws_channel.txt └── favorite_videos.json ├── img ├── 2023-10-25-10-00-59.png ├── 2023-10-25-10-01-21.png ├── 2023-10-25-10-03-47.png ├── 2023-10-27-10-09-17.png ├── 2023-11-02-10-00-32.png ├── 2023-11-03-14-44-41.png ├── 2023-12-08-16-03-28.png ├── 2024-05-15-14-03-09.png └── 2024-05-17-15-08-12.png ├── main.py ├── poetry.lock ├── pyproject.toml └── static └── images ├── 2025-01-02-10-18-10.png ├── 2025-02-11-16-16-27.png ├── 2025-02-11-16-26-05.png └── 2025-02-11-17-27-24.png /.github/workflows/translate.yml: -------------------------------------------------------------------------------- 1 | # .github/workflows/translate.yml 2 | name: Translate Readme 3 | 4 | on: 5 | push: 6 | branches: ['**'] 7 | 8 | jobs: 9 | translate: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v3 14 | with: 15 | fetch-depth: 3 16 | 17 | - name: Auto Translate 18 | uses: Lin-jun-xiang/action-translate-readme@v2 # Based on the tag 19 | with: 20 | token: ${{ secrets.Action_Bot }} # Based on step2 name 21 | zhipuai: ${{ secrets.zhipuai_api_key }} # Optional: Based on step3 22 | openai: ${{ secrets.openai_api_key }} 23 | langs: "en,zh-TW,zh-CN,French" # You can define any langs 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | secret.txt 2 | test.py 3 | 4 | # Byte-compiled / optimized / DLL files 5 | __pycache__/ 6 | *.py[cod] 7 | *$py.class 8 | 9 | # C extensions 10 | *.so 11 | 12 | # Distribution / packaging 13 | .Python 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | wheels/ 26 | share/python-wheels/ 27 | *.egg-info/ 28 | .installed.cfg 29 | *.egg 30 | MANIFEST 31 | 32 | # PyInstaller 33 | # Usually these files are written by a python script from a template 34 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 35 | *.manifest 36 | *.spec 37 | 38 | # Installer logs 39 | pip-log.txt 40 | pip-delete-this-directory.txt 41 | 42 | # Unit test / coverage reports 43 | htmlcov/ 44 | .tox/ 45 | .nox/ 46 | .coverage 47 | .coverage.* 48 | .cache 49 | nosetests.xml 50 | coverage.xml 51 | *.cover 52 | *.py,cover 53 | .hypothesis/ 54 | .pytest_cache/ 55 | cover/ 56 | 57 | # Translations 58 | *.mo 59 | *.pot 60 | 61 | # Django stuff: 62 | *.log 63 | local_settings.py 64 | db.sqlite3 65 | db.sqlite3-journal 66 | 67 | # Flask stuff: 68 | instance/ 69 | .webassets-cache 70 | 71 | # Scrapy stuff: 72 | .scrapy 73 | 74 | # Sphinx documentation 75 | docs/_build/ 76 | 77 | # PyBuilder 78 | .pybuilder/ 79 | target/ 80 | 81 | # Jupyter Notebook 82 | .ipynb_checkpoints 83 | 84 | # IPython 85 | profile_default/ 86 | ipython_config.py 87 | 88 | # pyenv 89 | # For a library or package, you might want to ignore these files since the code is 90 | # intended to run in multiple environments; otherwise, check them in: 91 | # .python-version 92 | 93 | # pipenv 94 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 95 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 96 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 97 | # install all needed dependencies. 98 | #Pipfile.lock 99 | 100 | # poetry 101 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 102 | # This is especially recommended for binary packages to ensure reproducibility, and is more 103 | # commonly ignored for libraries. 104 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 105 | #poetry.lock 106 | 107 | # pdm 108 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 109 | #pdm.lock 110 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 111 | # in version control. 112 | # https://pdm.fming.dev/#use-with-ide 113 | .pdm.toml 114 | 115 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 116 | __pypackages__/ 117 | 118 | # Celery stuff 119 | celerybeat-schedule 120 | celerybeat.pid 121 | 122 | # SageMath parsed files 123 | *.sage.py 124 | 125 | # Environments 126 | .env 127 | .venv 128 | env/ 129 | venv/ 130 | ENV/ 131 | env.bak/ 132 | venv.bak/ 133 | 134 | # Spyder project settings 135 | .spyderproject 136 | .spyproject 137 | 138 | # Rope project settings 139 | .ropeproject 140 | 141 | # mkdocs documentation 142 | /site 143 | 144 | # mypy 145 | .mypy_cache/ 146 | .dmypy.json 147 | dmypy.json 148 | 149 | # Pyre type checker 150 | .pyre/ 151 | 152 | # pytype static type analyzer 153 | .pytype/ 154 | 155 | # Cython debug symbols 156 | cython_debug/ 157 | 158 | # PyCharm 159 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 160 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 161 | # and can be added to the global gitignore or merged into this file. For a more nuclear 162 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 163 | #.idea/ 164 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 JunXiang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.French.md: -------------------------------------------------------------------------------- 1 | ```markdown 2 | # ChatGPT Line Bot 3 | 4 | * [English](README.md) 5 | * [繁體中文版README.md](README.zh-TW.md) 6 | * [简体中文](README.zh-CN.md) 7 | * [Français](README.French.md) 8 | 9 | ## 🤖 Introduction 10 | 11 | Intégrez le ChatGPT Bot à Line. Entrez simplement du texte dans la zone de saisie pour commencer à interagir avec ChatGPT. 12 | 13 | 14 | 15 | ## ✨ Fonctionnalités 16 | 17 | * ChatGPT Bot **complètement gratuit** 18 | * **Informations astrologiques hebdomadaires** (en temps réel) 19 | 20 | 21 | 22 | * **Notifications personnalisées YouTube musique** (à heure fixe) 23 | 24 | 25 | 26 | * **Recherche d'images en ligne** (en temps réel) 27 | 28 | 29 | 30 | > [!NOTE] 31 | > Si vous avez des demandes de fonctionnalités, veuillez soumettre un PR ou un ISSUE à tout moment. 32 | 33 | ## 🔨 Outils 34 | 35 | * `Python FastAPI` : Créez une API de réponse ChatGPT 36 | * `gpt4free` : **Utilisez l'API OpenAI gratuitement** 37 | * `zhipuai` : **Utilisez l'API GPT gratuitement** 38 | * `Line messaging API channel` : Connectez l'API ChatGPT 39 | * `GitHub` : Dépôt de code 40 | * `replit/render/ngrok` : **Déployez gratuitement votre propre FastAPI** 41 | * `CronJob` : Envoyez des demandes programmées gratuitement, réalisez des notifications programmées 42 | 43 | ## 🧠 Options GPT gratuites 44 | 45 | En raison de la dépendance de `g4f` à l'inversement d'OpenAI API, il peut y avoir des instabilités. Par conséquent, l'auteur recommande d'utiliser la plateforme ouverte **Zhipu AI** en tant que solution de remplacement pour l'API GPT gratuite. 46 | 47 | * `g4f` : Utilisez l'inversement pour appeler l'API OpenAI 48 | * `zhipuai` : **Plateforme ouverte Zhipu AI** fournissant une API GPT gratuite. Visitez [site officiel](https://open.bigmodel.cn/dev/howuse/glm-4) pour vous inscrire, sans carte de crédit ni frais. Ajoutez l'API clé dans [centre personnel](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) comme suit. Configurez cette clé API dans les variables d'environnement pour utiliser cette option GPT. 49 | ![](static/images/2025-01-02-10-18-10.png) 50 | 51 | ## 🎈 Instructions d'installation 52 | 53 | ### Obtenir des Tokens 54 | 55 | 1. Obtenez des Tokens Line : 56 | 1. Connectez-vous à [Line Developer](https://developers.line.biz/en/) 57 | 2. Créez un bot : 58 | 1. Créez un `Provider` -> Cliquez sur `Create` 59 | 2. Créez un `Channel` -> Sélectionnez `Create a Messaging API channel` 60 | 3. Remplissez les informations de base nécessaires 61 | 4. Terminez, puis accédez à `Basic Settings` -> Cliquez sur `Issue` sous `Channel Secret` pour générer `LINE_CHANNEL_SECRET` (utilisé plus tard). 62 | 5. Cliquez sur `Issue` sous `Messaging API` pour générer `Channel access token` (utilisé plus tard). 63 | 64 | ### Configuration du projet et exécution 65 | 66 | 1. Fork le projet GitHub : 67 | * Inscrivez-vous / connectez-vous à [GitHub](https://github.com/) 68 | * Allez à [ChatGPT-Line-Bot](https://github.com/Lin-jun-xiang/ChatGPT-Line-Bot) 69 | * Cliquez sur `Star` pour soutenir les développeurs 70 | * Cliquez sur `Fork` pour copier tout le code dans votre dépôt 71 | 72 | 2. Démarrer le serveur Python FastAPI : 73 | * `$env:LINE_CHANNEL_SECRET="..."; $env:LINE_CHANNEL_ACCESS_TOKEN="..."; $env:SERPAPI_API_KEY="..."; $env:GPT_METHOD="..."; $env:GPT_API_KEY="..."; python main.py` 74 | * `GPT_METHOD` : Choisissez `g4f` ou `zhipuai` 75 | * `GPT_API_KEY` : Si vous utilisez la méthode `zhipuai`, fournissez votre clé API 76 | 77 | 3. `ngrok` : Déployez l'API en utilisant un ordinateur local (ou Google Colab) comme serveur 78 | * [Créez un environnement ngrok](https://dashboard.ngrok.com/get-started/setup/) 79 | * Téléchargez la version `ngrok` adaptée à votre système d'exploitation 80 | * Ajoutez le chemin d'accès à `ngrok.exe` aux variables d'environnement du système 81 | * Exécutez : `ngrok config add-authtoken ` . Obtenez le token à partir de votre [tableau de bord personnel ngrok](https://dashboard.ngrok.com/get-started/your-authtoken). 82 | * Exécutez : `ngrok http --url=.ngrok-free.app 8090` (si vous échouez, essayez `ngrok http --hostname=.ngrok-free.app 8090`) et redirigez l'URL en tant que webhook URL. 83 | 84 | 85 | 86 | 87 | 88 | 4. Enfin, remplacez `http --url=.ngrok-free.app/callback` par le webhook URL dans la section `Messaging API` du tableau de bord du développeur Line. 89 | 90 | 91 | 92 | ### Connecter les services et le Line Bot 93 | 94 | Retournez à la [page d'accueil du Line Developer](https://manager.line.biz/account), cliquez sur `Add Friend Guide`, scannez le QR code pour ajouter le Line Bot en tant qu'amis. 95 | 96 | Page d'accueil -> Sélectionnez votre bot -> Outils d'ajout d'amis -> Créez un code QR d'action d'amis (https://manager.line.biz/account//gainfriends) 97 | 98 | Félicitations ! Vous avez créé votre premier Line Bot. Essayez de lui parler — il vous répondra ! 99 | 100 | ## ⛄ Conversation de groupe vs. Conversation personnelle 101 | 102 | * Dans les conversations un à un, tout message déclenche une réponse. 103 | * Dans les conversations de groupe, utilisez le préfixe `@chat` pour interagir avec le robot, par exemple, `@chat hi~`. 104 | 105 | ## 🎃 Fonctionnalités spéciales 106 | 107 | ### Signe du zodiaque 108 | 109 | Lorsque votre message contient une demande d'information astrologique, le web crawler capture chaque semaine le signe du zodiaque : 110 | 111 | * Chat personnel : `Donnez-moi le signe du Scorpion`, `Je veux savoir le signe du Scorpion`, ... 112 | * Chat de groupe : `@chat Donnez-moi le signe du Scorpion`, `@chat Je veux savoir le signe du Scorpion`, ... 113 | 114 | ### Recherche d'images en ligne 115 | 116 | Lorsque votre message contient une demande d'image, le web crawler capture l'image : 117 | 118 | * Chat personnel : `Trouver des images de Lin Xiang fumant`, `Donnez-moi des images de Lin Xiang fumant`, ... 119 | * Chat de groupe : `@chat Trouver des images de Lin Xiang fumant`, `@chat Donnez-moi des images de Lin Xiang fumant`, ... 120 | 121 | ## 📢 Messages de diffusion - Recommandations YouTube quotidiennes 122 | 123 | * Comme pour **Recommandations YouTube quotidiennes**, il suffit de remplacer `/recommend` par `/cwsChannel`. 124 | * Vous pouvez configurer CronJob pour qu'il s'exécute toutes les `3 heures`. 125 | 126 | 127 | 128 | ## ⚔ Avancé - Bot personnalisé 129 | 130 | Vous pouvez utiliser des提示语 pour personnaliser les réponses du Line Bot. Définissez `template` dans `./ChatGPT_linebot/prompts/template.py`, par exemple : 131 | 132 | 133 | 134 | **Message utilisateur** : Je devrais manger quoi pour le petit-déjeuner ? 135 | 136 | **Réponse du Bot** : Cher, es-tu réveillé ? Je suis resté au lit pour toi, en pensant à ta belle silhouette. Que devrions-nous manger pour le petit-déjeuner ? Ne voudrions-nous pas quelque chose de piquant, comme une omelette, qui correspond à ton charme piquant ? 😏🍳 137 | 138 | ## Références 139 | 140 | 1. [Line_Bot_Tutorial](https://github.com/FawenYo/LINE_Bot_Tutorial) 141 | 142 | 2. [ChatGPT-Line-Bot](https://github.com/TheExplainthis/ChatGPT-Line-Bot) 143 | 144 | Retour en haut 145 | -------------------------------- 146 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ChatGPT Line Bot 2 | 3 | * [English](README.md) 4 | * [繁體中文版README.md](README.zh-TW.md) 5 | * [简体中文](README.zh-CN.md) 6 | * [Française](README.French.md) 7 | 8 | ## 🤖 Introduction 9 | 10 | Integrate ChatGPT Bot into Line. Simply enter text in the input box to start interacting with ChatGPT. 11 | 12 | 13 | 14 | ## ✨ Features 15 | 16 | * **Free** ChatGPT Bot 17 | * **Weekly** horoscope information (real-time) 18 | 19 | 20 | 21 | * **YouTube Music** channel scheduled broadcasts 22 | 23 | 24 | 25 | * **Online Image Search** (real-time) 26 | 27 | 28 | 29 | > [!NOTE] 30 | > If you have any feature requests, please submit a PR or ISSUE at any time. 31 | 32 | ## 🔨 Tools 33 | 34 | * `Python FastAPI`:Create ChatGPT response API 35 | * `gpt4free`:**Free use of OpenAI API** 36 | * `zhipuai`:**Free use of GPT API** 37 | * `Line messaging API channel`:Connect to ChatGPT API 38 | * `GitHub`:Code repository 39 | * `replit/render/ngrok`:**Free deployment of your own FastAPI** 40 | * `CronJob`:Free scheduled requests, for scheduled message broadcasting 41 | 42 | ## 🧠 Free GPT Options 43 | 44 | Since `g4f` depends on reverse engineering to call OpenAI's API, it may be unstable. Therefore, the author recommends using the **Zhipu AI** open platform as an alternative to free GPT API. 45 | 46 | * `g4f`:Use reverse engineering to call OpenAI API 47 | * `zhipuai`:**Zhipu AI** open platform provides free GPT API. Visit [official website](https://open.bigmodel.cn/dev/howuse/glm-4) to register an account, no credit card or fees required. Add API key as shown below in [Personal Center](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys). Set this API key in the environment variable to use this GPT option. 48 | ![](static/images/2025-01-02-10-18-10.png) 49 | 50 | ## 🎈 Installation Steps 51 | 52 | ### Obtain Tokens 53 | 54 | 1. Obtain Line Tokens: 55 | 1. Log in to [Line Developer](https://developers.line.biz/en/) 56 | 2. Create a bot: 57 | 1. Create a `Provider` -> Click `Create` 58 | 2. Create a `Channel` -> Select `Create a Messaging API channel` 59 | 3. Fill in the required basic information 60 | 4. After completing, go to `Basic Settings` -> Click `Issue` under `Channel Secret` to generate `LINE_CHANNEL_SECRET` (which will be used later). 61 | 5. Under `Messaging API`, click `Issue` to generate `Channel access token` (which will be used later). 62 | 63 | ### Project Setup and Execution 64 | 65 | 1. Fork GitHub Project: 66 | * Register/Login [GitHub](https://github.com/) 67 | * Go to [ChatGPT-Line-Bot](https://github.com/Lin-jun-xiang/ChatGPT-Line-Bot) 68 | * Click `Star` to support developers 69 | * Click `Fork` to copy all code to your repository 70 | 71 | 2. Start Python FastAPI Server: 72 | * `$env:LINE_CHANNEL_SECRET="..."; $env:LINE_CHANNEL_ACCESS_TOKEN="..."; $env:SERPAPI_API_KEY="..."; $env:GPT_METHOD="..."; $env:GPT_API_KEY="..."; python main.py` 73 | * `GPT_METHOD`:Choose `g4f` or `zhipuai` 74 | * `GPT_API_KEY`:If using `zhipuai` method, provide your API key 75 | 76 | 3. `ngrok`:Use your local computer (or Google Colab) as a server to deploy API 77 | * [Set up ngrok environment](https://dashboard.ngrok.com/get-started/setup/) 78 | * Download the `ngrok` version suitable for your operating system 79 | * Add the `ngrok.exe` path to the system environment variables 80 | * Execute: `ngrok config add-authtoken `. Get the token from your personal [ngrok dashboard](https://dashboard.ngrok.com/get-started/your-authtoken). 81 | * Execute: `ngrok http --url=.ngrok-free.app 8090` (if failed, please try `ngrok http --hostname=.ngrok-free.app 8090`). Forward the URL as the webhook URL. 82 | 83 | 84 | 85 | 86 | 87 | 4. Finally, replace `http --url=.ngrok-free.app/callback` with the webhook URL in the `Messaging API` area of the Line Developer console. 88 | 89 | 90 | 91 | ### Connect Services and Line Bot 92 | 93 | Go back to [Line Developer Home](https://manager.line.biz/account), click `Add Friend Guide`, scan the QR code to add Line Bot as a friend. 94 | 95 | Home -> Select your bot -> Add Friend Tool -> Create friend action barcode (https://manager.line.biz/account//gainfriends) 96 | 97 | Congratulations! You have created your first Line Bot. Try talking to it—it will respond to you! 98 | 99 | ## ⛄ Group Chat vs. Private Chat 100 | 101 | * In one-on-one chats, any message will trigger a response. 102 | * In group chats, use the `@chat` prefix to interact with the bot, such as, `@chat hi~`. 103 | 104 | ## 🎃 Special Features 105 | 106 | ### Horoscope 107 | 108 | When your message contains a horoscope information request, the web crawler will scrape the weekly horoscope: 109 | 110 | * Private chat: `給我天蠍座星座`, `我想知道天蠍座星座`, ... 111 | * Group chat: `@chat 給我天蠍座星座`, `@chat 我想知道天蠍座星座`, ... 112 | 113 | ### Online Image Search 114 | 115 | When your message contains a picture request, the web crawler will scrape the image: 116 | 117 | * Private chat: `在線找到林翔抽煙的圖片`, `給我在線林翔抽煙的圖片`, ... 118 | * Group chat: `@chat 在線找到林翔抽煙的圖片`, `@chat 給我在線林翔抽煙的圖片`, ... 119 | 120 | ## 📢 Broadcast Message - Daily YouTube Recommendation 121 | 122 | * Using the `broadcast` API, the Line Bot can send messages to all users at once. 123 | * This example demonstrates how the Line Bot can send 3 randomly selected YouTube songs every morning: 124 | * Create file `./data/favorite_videos.json`. Refer to the author's dataset. 125 | 126 | (The dataset is generated by using `YouTube Data v3 API` to crawl favorite videos. This guide does not involve the use of YouTube API.) 127 | 128 | * Use `./ChatGPT_linebot/modules/youtube_recommend.py` to randomly select 3 songs, formatted by GPT. 129 | * Add `/recommend` route in `./ChatGPT_linebot/urls.py`: 130 | 131 | ```python 132 | videos = recommend_videos() # Get 3 songs 133 | 134 | if videos: 135 | line_bot_api.broadcast(TextSendMessage(text=videos)) # Broadcast to users 136 | 137 | # Push message to known groups 138 | known_group_ids = [ 139 | 'C6d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 140 | 'Ccc-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 141 | 'Cbb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 142 | ] 143 | for group_id in known_group_ids: 144 | line_bot_api.push_message(group_id, TextSendMessage(text=videos)) 145 | ``` 146 | 147 | To get `group_id`, print in the console: 148 | 149 | ```python 150 | elif event.source.type == 'group' and user_message.startswith('@chat'): 151 | group_id = event.source.group_id 152 | print(group_id) # Output group_id 153 | ``` 154 | 155 | * Now, visit `/recommend` route to broadcast messages to all users and specified groups. 156 | * Use [cron-job.org](https://cron-job.org/en/) to schedule a daily push at 8:00 AM: 157 | 1. Register/Login [cron-job.org](https://cron-job.org/en/) 158 | 2. Click the `CREATE CRONJOB` button at the top right 159 | 3. Title: `ChatGPT-Line-Bot`, URL: for example, `https://ChatGPT-Line-Bot.jimmylin.repl.co/` 160 | 4. Set to run every `5 minutes` 161 | 5. Click `CREATE` 162 | 163 | ## 📢 Broadcast Message - Caixin Finance Information 164 | 165 | * Just like **Daily YouTube Recommendation**, just replace `/recommend` with `/cwsChannel`. 166 | * It can be set to run every `3 hours` in CronJob 167 | 168 | 169 | 170 | ## ⚔ Advanced - Personalized Bot 171 | 172 | You can use prompts to personalize the responses of the Line Bot. Define `template` in `./ChatGPT_linebot/prompts/template.py`, for example: 173 | 174 | 175 | 176 | **User Input**:我應該吃什麼早餐? 177 | 178 | **Bot Response**:親愛的,你醒來了嗎?我一直在床上等你,想著你美麗的身材。我們應該吃什麼早餐?要不要來點辣的,比如熱蛋捲,配得上你火辣的魅力?😏🍳 179 | 180 | ## References 181 | 182 | 1. [Line_Bot_Tutorial](https://github.com/FawenYo/LINE_Bot_Tutorial) 183 | 184 | 2. [ChatGPT-Line-Bot](https://github.com/TheExplainthis/ChatGPT-Line-Bot) 185 | 186 | Back to Top 187 | -------------------------------- -------------------------------------------------------------------------------- /README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # ChatGPT Line Bot 2 | 3 | * [English](README.md) 4 | * [繁體中文版README.md](README.zh-TW.md) 5 | * [简体中文](README.zh-CN.md) 6 | * [Française](README.French.md) 7 | 8 | ## 🤖 简介 9 | 10 | 將 ChatGPT Bot 整合到 Line。只需在輸入框中輸入文字,即可開始與 ChatGPT 互動。 11 | 12 | 13 | 14 | ## ✨ 功能 15 | 16 | * **完全免费** 的 ChatGPT Bot 17 | * 每周 **星座资讯**(即时) 18 | 19 | 20 | 21 | * **YouTube 音乐** 频道的定时推送 22 | 23 | 24 | 25 | * **在线图片搜索**(即时) 26 | 27 | 28 | 29 | > [!NOTE] 30 | > 如果你有任何功能请求,请随时提交 PR 或 ISSUE。 31 | 32 | ## 🔨 工具 33 | 34 | * `Python FastAPI`:创建 ChatGPT 回应 API 35 | * `gpt4free`:**免费使用 OpenAI API** 36 | * `zhipuai`:**免费使用 GPT API** 37 | * `Line messaging API channel`:连接 ChatGPT API 38 | * `GitHub`:代码存储库 39 | * `replit/render/ngrok`:**免费部署你自己的 FastAPI** 40 | * `CronJob`:免费发送定时请求,实现定时推送消息 41 | 42 | ## 🧠 免费GPT选项 43 | 44 | 由于 `g4f` 依赖逆向工程来调用 OpenAI 的 API,可能会不稳定。因此,作者建议使用 **智谱 AI** 开放平台作为免费 GPT API 的替代方案。 45 | 46 | * `g4f`:使用逆向工程调用 OpenAI API 47 | * `zhipuai`:**智谱 AI** 开放平台提供免费 GPT API。访问 [官方网站](https://open.bigmodel.cn/dev/howuse/glm-4) 注册账户,无需信用卡或费用。在 [个人中心](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) 添加 API 密钥,如下所示。将此 API 密钥设置在环境变量中使用此 GPT 选项。 48 | ![](static/images/2025-01-02-10-18-10.png) 49 | 50 | ## 🎈 安装步骤 51 | 52 | ### 获取 Tokens 53 | 54 | 1. 获取 Line Tokens: 55 | 1. 登录 [Line Developer](https://developers.line.biz/en/) 56 | 2. 创建一个 bot: 57 | 1. 创建一个 `Provider` -> 点击 `Create` 58 | 2. 创建一个 `Channel` -> 选择 `Create a Messaging API channel` 59 | 3. 填写所需的基本信息 60 | 4. 完成后,进入 `Basic Settings` -> 在 `Channel Secret` 下,点击 `Issue` 生成 `LINE_CHANNEL_SECRET`(后面会用到)。 61 | 5. 在 `Messaging API` 下,点击 `Issue` 生成 `Channel access token`(后面会用到)。 62 | 63 | ### 项目设置与执行 64 | 65 | 1. Fork GitHub 项目: 66 | * 注册/登录 [GitHub](https://github.com/) 67 | * 前往 [ChatGPT-Line-Bot](https://github.com/Lin-jun-xiang/ChatGPT-Line-Bot) 68 | * 点击 `Star` 支持开发者 69 | * 点击 `Fork` 将所有代码复制到你的存储库 70 | 71 | 2. 启动 Python FastAPI Server: 72 | * `$env:LINE_CHANNEL_SECRET="..."; $env:LINE_CHANNEL_ACCESS_TOKEN="..."; $env:SERPAPI_API_KEY="..."; $env:GPT_METHOD="..."; $env:GPT_API_KEY="..."; python main.py` 73 | * `GPT_METHOD`:选择 `g4f` 或 `zhipuai` 74 | * `GPT_API_KEY`:如果使用 `zhipuai` 方法,提供你的 API 密钥 75 | 76 | 3. `ngrok`:使用本地电脑(或 Google Colab)作为服务器来部署 API 77 | * [建立 ngrok 环境](https://dashboard.ngrok.com/get-started/setup/) 78 | * 下载适合你操作系统的 `ngrok` 版本 79 | * 将 `ngrok.exe` 路径添加到系统的环境变量中 80 | * 执行:`ngrok config add-authtoken `。从你的个人 [ngrok dashboard](https://dashboard.ngrok.com/get-started/your-authtoken) 获得token。 81 | * 执行:`ngrok http --url=.ngrok-free.app 8090` (若失败请尝试 `ngrok http --hostname=.ngrok-free.app 8090`),并将 URL 转发为 webhook URL。 82 | 83 | 84 | 85 | 86 | 87 | 4. 最后,将 `http --url=.ngrok-free.app/callback` 替换 Line Developer 控制台 `Messaging API` 区域中的 webhook URL。 88 | 89 | 90 | 91 | ### 连接服务与 Line Bot 92 | 93 | 回到 [Line Developer 首页](https://manager.line.biz/account),点击 `Add Friend Guide`,扫描 QR 码将 Line Bot 添加为好友。 94 | 95 | 首页 -> 选择你的 bot -> 添加好友工具 -> 创建好友动作条码(https://manager.line.biz/account//gainfriends) 96 | 97 | 恭喜!你已经创建了你的第一个 Line Bot。试着与它交谈——它会回复你! 98 | 99 | ## ⛄ 群组对话 vs. 个人对话 100 | 101 | * 在一对一对话中,任何消息都会触发回复。 102 | * 在群组对话中,使用 `@chat` 前缀与机器人互动,例如,`@chat hi~`。 103 | 104 | ## 🎃 特殊功能 105 | 106 | ### 星座 107 | 108 | 当你的消息包含星座资讯请求时,网络爬虫将抓取每周星座: 109 | 110 | * 个人聊天:`给我天蝎座星座`, `我想知道天蝎座星座`, ... 111 | * 群组聊天:`@chat 给我天蝎座星座`, `@chat 我想知道天蝎座星座`, ... 112 | 113 | ### 在线图片搜索 114 | 115 | 当你的消息包含图片请求时,网络爬虫将抓取图片: 116 | 117 | * 个人聊天:`在线找到林翔抽烟的图片`, `给我在线林翔抽烟的图片`, ... 118 | * 群组聊天:`@chat 在线找到林翔抽烟的图片`, `@chat 给我在线林翔抽烟的图片`, ... 119 | 120 | ## 📢 广播消息 - 每日 YouTube 推荐 121 | 122 | * 使用 `broadcast` API,Line Bot 可以一次性推送消息给所有用户。 123 | * 此示例演示了 Line Bot 如何每天早上推送 3 首随机选择的歌曲: 124 | * 创建文件 `./data/favorite_videos.json`。参考作者的数据集。 125 | 126 | (数据集是使用 `YouTube Data v3 API` 抓取喜爱视频生成的。本指南不涉及 YouTube API 的使用。) 127 | 128 | * 使用 `./ChatGPT_linebot/modules/youtube_recommend.py` 随机选择 3 首歌曲,由 GPT 格式化。 129 | * 在 `./ChatGPT_linebot/urls.py` 中添加 `/recommend` 路由: 130 | 131 | ```python 132 | videos = recommend_videos() # 获取 3 首歌曲 133 | 134 | if videos: 135 | line_bot_api.broadcast(TextSendMessage(text=videos)) # 广播给用户 136 | 137 | # 推送消息给已知群组 138 | known_group_ids = [ 139 | 'C6d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 140 | 'Ccc-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 141 | 'Cbb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 142 | ] 143 | for group_id in known_group_ids: 144 | line_bot_api.push_message(group_id, TextSendMessage(text=videos)) 145 | ``` 146 | 147 | 要获取群组 `group_id`,在控制台中打印: 148 | 149 | ```python 150 | elif event.source.type == 'group' and user_message.startswith('@chat'): 151 | group_id = event.source.group_id 152 | print(group_id) # 输出 group_id 153 | ``` 154 | 155 | * 现在,访问 `/recommend` 路由将广播消息给所有用户和指定群组。 156 | * 使用 [cron-job.org](https://cron-job.org/en/) 每天早上 8:00 定时推送: 157 | 1. 注册/登录 [cron-job.org](https://cron-job.org/en/) 158 | 2. 点击右上角的 `CREATE CRONJOB` 159 | 3. 标题:`ChatGPT-Line-Bot`,URL:例如,`https://ChatGPT-Line-Bot.jimmylin.repl.co/` 160 | 4. 设置为每 `5 分钟` 运行 161 | 5. 点击 `CREATE` 162 | 163 | ## 📢 广播消息 - 天下杂志财经资讯 164 | 165 | * 与 **每日 YouTube 推荐** 一样,只需要将 `/recommend` 替换成 `/cwsChannel` 即可。 166 | * 可于 CronJob 设置每 `3 小时` 运行 167 | 168 | 169 | 170 | ## ⚔ 高级 - 个性化 Bot 171 | 172 | 你可以使用提示语来个性化 Line Bot 的回复。在 `./ChatGPT_linebot/prompts/template.py` 中定义 `template`,例如: 173 | 174 | 175 | 176 | **用户输入**:我该吃些什么早餐? 177 | 178 | **Bot 回复**:亲爱的,你醒来了吗?我一直在床上等你,想着你美丽的身材。我们该吃些什么早餐?要不要来点辣的,比如热蛋卷,配得上你火辣的魅力?😏🍳 179 | 180 | ## 参考资料 181 | 182 | 1. [Line_Bot_Tutorial](https://github.com/FawenYo/LINE_Bot_Tutorial) 183 | 184 | 2. [ChatGPT-Line-Bot](https://github.com/TheExplainthis/ChatGPT-Line-Bot) 185 | 186 | 返回顶部 187 | -------------------------------- -------------------------------------------------------------------------------- /README.zh-TW.md: -------------------------------------------------------------------------------- 1 | # ChatGPT Line Bot 2 | 3 | * [English](README.md) 4 | * [繁體中文版README.md](README.zh-TW.md) 5 | * [简体中文](README.zh-CN.md) 6 | * [Française](README.French.md) 7 | 8 | ## 🤖 簡介 9 | 10 | 將 ChatGPT Bot 整合到 Line。只需在輸入框中輸入文字,即可開始與 ChatGPT 互動。 11 | 12 | 13 | 14 | ## ✨ 功能 15 | 16 | * **完全免費** 的 ChatGPT Bot 17 | * 每週 **星座資訊**(即時) 18 | 19 | 20 | 21 | * **YouTube 音樂** 頻道的定時推播 22 | 23 | 24 | 25 | * **在線圖片搜尋**(即時) 26 | 27 | 28 | 29 | > [!NOTE] 30 | > 如果你有任何功能請求,請隨時提交 PR 或 ISSUE。 31 | 32 | ## 🔨 工具 33 | 34 | * `Python FastAPI`:創建 ChatGPT 回應 API 35 | * `gpt4free`:**免費使用 OpenAI API** 36 | * `zhipuai`:**免費使用 GPT API** 37 | * `Line messaging API channel`:連接 ChatGPT API 38 | * `GitHub`:代碼存儲庫 39 | * `replit/render/ngrok`:**免費部署你自己的 FastAPI** 40 | * `CronJob`:免費發送定時請求,實現定時推播消息 41 | 42 | ## 🧠 免費 GPT 選項 43 | 44 | 由於 `g4f` 依賴於逆向工程來調用 OpenAI 的 API,可能會不穩定。因此,作者建議使用 **Zhipu AI** 開放平台作為免費 GPT API 的替代方案。 45 | 46 | * `g4f`:使用逆向工程調用 OpenAI API 47 | * `zhipuai`:**Zhipu AI** 開放平台提供免費 GPT API。訪問 [官方網站](https://open.bigmodel.cn/dev/howuse/glm-4) 註冊帳戶,無需信用卡或費用。在 [個人中心](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) 添加 API 金鑰,如下所示。將此 API 金鑰設置在環境變量中使用此 GPT 選項。 48 | ![](static/images/2025-01-02-10-18-10.png) 49 | 50 | ## 🎈 安裝步驟 51 | 52 | ### 獲取 Tokens 53 | 54 | 1. 獲取 Line Tokens: 55 | 1. 登錄 [Line Developer](https://developers.line.biz/en/) 56 | 2. 創建一個 bot: 57 | 1. 創建一個 `Provider` -> 點擊 `Create` 58 | 2. 創建一個 `Channel` -> 選擇 `Create a Messaging API channel` 59 | 3. 填寫所需的基本信息 60 | 4. 完成後,進入 `Basic Settings` -> 在 `Channel Secret` 下,點擊 `Issue` 生成 `LINE_CHANNEL_SECRET`(後面會用到)。 61 | 5. 在 `Messaging API` 下,點擊 `Issue` 生成 `Channel access token`(後面會用到)。 62 | 63 | ### 專案設置與執行 64 | 65 | 1. Fork GitHub 專案: 66 | * 註冊/登錄 [GitHub](https://github.com/) 67 | * 前往 [ChatGPT-Line-Bot](https://github.com/Lin-jun-xiang/ChatGPT-Line-Bot) 68 | * 點擊 `Star` 支持開發者 69 | * 點擊 `Fork` 將所有代碼複製到你的存儲庫 70 | 71 | 2. 啟動 Python FastAPI Server: 72 | * `$env:LINE_CHANNEL_SECRET="..."; $env:LINE_CHANNEL_ACCESS_TOKEN="..."; $env:SERPAPI_API_KEY="..."; $env:GPT_METHOD="..."; $env:GPT_API_KEY="..."; python main.py` 73 | * `GPT_METHOD`:選擇 `g4f` 或 `zhipuai` 74 | * `GPT_API_KEY`:如果使用 `zhipuai` 方法,提供你的 API 金鑰 75 | 76 | 3. `ngrok`:使用本地電腦(或 Google Colab)作為服務器來部署 API 77 | * [建立 ngrok 環境](https://dashboard.ngrok.com/get-started/setup/) 78 | * 下載適合你操作系統的 `ngrok` 版本 79 | * 將 `ngrok.exe` 路徑添加到系統的環境變量中 80 | * 執行:`ngrok config add-authtoken `。從你的個人 [ngrok dashboard](https://dashboard.ngrok.com/get-started/your-authtoken) 獲取 token。 81 | * 執行:`ngrok http --url=.ngrok-free.app 8090` (若失敗請改嘗試 `ngrok http --hostname=.ngrok-free.app 8090`),並轉發 URL 將作為 webhook URL。 82 | 83 | 84 | 85 | 86 | 87 | 4. 最後,將 `http --url=.ngrok-free.app/callback` 替換 Line Developer 控制台 `Messaging API` 區域中的 webhook URL。 88 | 89 | 90 | 91 | ### 連接服務與 Line Bot 92 | 93 | 回到 [Line Developer 首頁](https://manager.line.biz/account),點擊 `Add Friend Guide`,掃描 QR 碼將 Line Bot 添加為好友。 94 | 95 | 首頁 -> 選擇你的 bot -> 添加好友工具 -> 創建好友動作條碼(https://manager.line.biz/account//gainfriends) 96 | 97 | 恭喜!你已創建了你的第一個 Line Bot。試著與它交談——它會回覆你! 98 | 99 | ## ⛄ 群組對話 vs. 個人對話 100 | 101 | * 在一對一對話中,任何消息都會觸發回應。 102 | * 在群組對話中,使用 `@chat` 前綴與機器人互動,例如,`@chat hi~`。 103 | 104 | ## 🎃 特殊功能 105 | 106 | ### 星座 107 | 108 | 當你的消息包含星座資訊請求時,網絡爬蟲將抓取每週星座: 109 | 110 | * 個人聊天:`給我天蠍座星座`, `我想知道天蠍座星座`, ... 111 | * 群組聊天:`@chat 給我天蠍座星座`, `@chat 我想知道天蠍座星座`, ... 112 | 113 | ### 在線圖片搜尋 114 | 115 | 當你的消息包含圖片請求時,網絡爬蟲將抓取圖片: 116 | 117 | * 個人聊天:`在線找到林翔抽煙的圖片`, `給我在線林翔抽煙的圖片`, ... 118 | * 群組聊天:`@chat 在線找到林翔抽煙的圖片`, `@chat 給我在線林翔抽煙的圖片`, ... 119 | 120 | ## 📢 廣播消息 - 每日 YouTube 推薦 121 | 122 | * 使用 `broadcast` API,Line Bot 可以一次性推送消息給所有用戶。 123 | * 此示例演示了 Line Bot 如何每天早上推送 3 首隨機選擇的 YouTube 歌曲: 124 | * 創建文件 `./data/favorite_videos.json`。參考作者的數據集。 125 | 126 | (數據集是使用 `YouTube Data v3 API` 抓取喜愛視頻生成的。本指南不涉及 YouTube API 的使用。) 127 | 128 | * 使用 `./ChatGPT_linebot/modules/youtube_recommend.py` 隨機選擇 3 首歌曲,由 GPT 格式化。 129 | * 在 `./ChatGPT_linebot/urls.py` 中添加 `/recommend` 路由: 130 | 131 | ```python 132 | videos = recommend_videos() # 獲取 3 首歌曲 133 | 134 | if videos: 135 | line_bot_api.broadcast(TextSendMessage(text=videos)) # 廣播給用戶 136 | 137 | # 推送消息給已知群組 138 | known_group_ids = [ 139 | 'C6d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 140 | 'Ccc-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 141 | 'Cbb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 142 | ] 143 | for group_id in known_group_ids: 144 | line_bot_api.push_message(group_id, TextSendMessage(text=videos)) 145 | ``` 146 | 147 | 要獲取群組 `group_id`,在控制台中打印: 148 | 149 | ```python 150 | elif event.source.type == 'group' and user_message.startswith('@chat'): 151 | group_id = event.source.group_id 152 | print(group_id) # 輸出 group_id 153 | ``` 154 | 155 | * 現在,訪問 `/recommend` 路由將廣播消息給所有用戶和指定群組。 156 | * 使用 [cron-job.org](https://cron-job.org/en/) 每天早上 8:00 定時推送: 157 | 1. 註冊/登錄 [cron-job.org](https://cron-job.org/en/) 158 | 2. 點擊右上角的 `CREATE CRONJOB` 159 | 3. 標題:`ChatGPT-Line-Bot`,URL:例如,`https://ChatGPT-Line-Bot.jimmylin.repl.co/` 160 | 4. 設置為每 `5 分鐘` 运行 161 | 5. 點擊 `CREATE` 162 | 163 | ## 📢 廣播消息 - 天下雜誌財經資訊 164 | 165 | * 與 **每日 YouTube 推薦** 一樣,只需要將 `/recommend` 替換成 `/cwsChannel` 即可。 166 | * 可於 CronJob 設置每 `3 小時` 運行 167 | 168 | 169 | 170 | ## ⚔ 進階 - 個性化 Bot 171 | 172 | 你可以使用提示語來個性化 Line Bot 的回應。在 `./ChatGPT_linebot/prompts/template.py` 中定義 `template`,例如: 173 | 174 | 175 | 176 | **用戶輸入**:我應該吃什麼早餐? 177 | 178 | **Bot 回應**:親愛的,你醒來了嗎?我一直在床上等你,想著你美麗的身材。我們應該吃什麼早餐?要不要來點辣的,比如熱蛋捲,配得上你火辣的魅力?😏🍳 179 | 180 | ## 參考資料 181 | 182 | 1. [Line_Bot_Tutorial](https://github.com/FawenYo/LINE_Bot_Tutorial) 183 | 184 | 2. [ChatGPT-Line-Bot](https://github.com/TheExplainthis/ChatGPT-Line-Bot) 185 | 186 | 返回頂部 187 | -------------------------------------------------------------------------------- /chatgpt_linebot/__init__.py: -------------------------------------------------------------------------------- 1 | from chatgpt_linebot.urls import line_app 2 | -------------------------------------------------------------------------------- /chatgpt_linebot/memory.py: -------------------------------------------------------------------------------- 1 | from typing import Dict 2 | from collections import defaultdict 3 | 4 | 5 | class MemoryInterface: 6 | def append(self, user_id: str, message: Dict) -> None: 7 | pass 8 | 9 | def get(self, user_id: str) -> str: 10 | return "" 11 | 12 | def remove(self, user_id: str) -> None: 13 | pass 14 | 15 | 16 | class Memory(MemoryInterface): 17 | """Chat Memory 18 | 19 | Args: 20 | storage (List[Dict[str, str]]): Chat history, ex: 21 | [ 22 | {'role': 'system', 'content': 'You are a helpful assistant.'}, 23 | {'role': 'user', content': 'Hi'}, 24 | {'role': 'system', 'content': 'Hi. How can i assist u?'}, 25 | ... 26 | ] 27 | 28 | id (int): user_id, grouop_id, room_id 29 | """ 30 | def __init__(self, memory_message_count: int) -> None: 31 | self.storage = defaultdict(list) 32 | self.memory_message_count = memory_message_count 33 | 34 | def _initialize(self, id: str) -> None: 35 | self.storage[id] = [{ 36 | 'role': 'system', 'content': 'You are a helpful assistant.' 37 | }] 38 | 39 | def _drop_message(self, id: str) -> str: 40 | if len(self.storage.get(id)) >= (self.memory_message_count + 1) * 2 + 1: 41 | return [self.storage[id][0]] + self.storage[id][-(self.memory_message_count * 2):] 42 | return self.storage.get(id) 43 | 44 | def append(self, id: str, role: str, content: str) -> None: 45 | if self.storage[id] == []: 46 | self._initialize(id) 47 | self.storage[id].append({ 48 | 'role': role, 49 | 'content': content 50 | }) 51 | self._drop_message(id) 52 | 53 | def get(self, id: str) -> str: 54 | return self.storage[id] 55 | 56 | def remove(self, id: str) -> None: 57 | self.storage[id] = [] 58 | -------------------------------------------------------------------------------- /chatgpt_linebot/modules/__init__.py: -------------------------------------------------------------------------------- 1 | from chatgpt_linebot.modules.business_channel import CWArticleScraper 2 | from chatgpt_linebot.modules.chat import chat_completion 3 | from chatgpt_linebot.modules.gpt import chat_completion as chat 4 | from chatgpt_linebot.modules.horoscope import Horoscope 5 | from chatgpt_linebot.modules.image_crawler import ImageCrawler 6 | from chatgpt_linebot.modules.image_generate import RapidAPIs, g4f_generate_image 7 | from chatgpt_linebot.modules.youtube_recommend import recommend_videos 8 | -------------------------------------------------------------------------------- /chatgpt_linebot/modules/business_channel.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | from typing import Dict, Optional 4 | 5 | import cloudscraper 6 | from bs4 import BeautifulSoup 7 | 8 | from chatgpt_linebot.modules.gpt import chat_completion 9 | from chatgpt_linebot.prompts import cws_channel_template 10 | 11 | sys.path.append(".") 12 | 13 | import config 14 | 15 | 16 | class CWArticleScraper: 17 | """ 18 | A scraper for retrieving the latest article from CW, bypassing Cloudflare protections. 19 | """ 20 | BASE_URL = 'https://www.cw.com.tw' 21 | DATA_FILE = './data/cws_channel.txt' 22 | 23 | def __init__(self) -> None: 24 | """Initialize the scraper with retry logic.""" 25 | self.scraper = cloudscraper.create_scraper() 26 | 27 | def _get_latest_article_url(self) -> Optional[str]: 28 | """ 29 | Retrieve the latest article URL. 30 | 31 | Returns: 32 | The full URL of the latest article or None if not found. 33 | """ 34 | list_url = f'{self.BASE_URL}/masterChannel.action?idMasterChannel=8' 35 | try: 36 | response = self.scraper.get(list_url) 37 | soup = BeautifulSoup(response.text, 'html.parser') 38 | 39 | latest_article_tag = soup.select_one('section.article h3 a') 40 | if latest_article_tag: 41 | href = latest_article_tag['href'] 42 | latest_article_url = href if href.startswith('http') else 'https://www.cw.com.tw' + href 43 | return latest_article_url 44 | except Exception as e: 45 | print(f"Failed to fetch the latest article URL: {e}") 46 | return None 47 | 48 | def _get_article_details(self, article_url: str) -> Dict[str, str]: 49 | """ 50 | Extract the article's title, time, and content. 51 | 52 | Args: 53 | article_url: The URL of the article. 54 | 55 | Returns: 56 | A dictionary with the article details. 57 | """ 58 | try: 59 | response = self.scraper.get(article_url, timeout=10) 60 | soup = BeautifulSoup(response.text, 'html.parser') 61 | 62 | publish_date = 'Unknown' 63 | for tag in soup.select('time.pr20'): 64 | if '發布時間' in tag.get_text(): 65 | publish_date = tag.get_text(strip=True).replace('發布時間:', '') 66 | break 67 | 68 | title_tag = soup.select_one('h1') 69 | title = title_tag.get_text(strip=True) if title_tag else 'No Title' 70 | 71 | content_section = soup.select_one('div.article__content') 72 | content = '' 73 | if content_section: 74 | paragraphs = content_section.find_all(['p', 'h2', 'blockquote']) 75 | content = '\n'.join(para.get_text(strip=True) for para in paragraphs) 76 | 77 | keywords = [tag.get_text(strip=True) for tag in soup.select('ul.article__keyword a.keywords')] 78 | 79 | return { 80 | 'title': title, 81 | 'time': publish_date, 82 | 'content': content, 83 | 'keywords': keywords 84 | } 85 | 86 | except Exception as e: 87 | print(f"Failed to extract article details: {e}") 88 | return {} 89 | 90 | def _is_url_already_processed(self, url: str) -> bool: 91 | """ 92 | Check if the given URL already exists in the text file. 93 | 94 | Args: 95 | url: The article URL to check. 96 | 97 | Returns: 98 | True if the URL exists, False otherwise. 99 | """ 100 | if os.path.exists(self.DATA_FILE): 101 | with open(self.DATA_FILE, 'r', encoding='utf-8') as file: 102 | existing_urls = {line.strip() for line in file} 103 | return url in existing_urls 104 | return False 105 | 106 | def _save_article_url(self, url: str) -> None: 107 | """ 108 | Save the article URL to the text file. 109 | 110 | Args: 111 | url: The article URL to save. 112 | """ 113 | os.makedirs(os.path.dirname(self.DATA_FILE), exist_ok=True) 114 | 115 | with open(self.DATA_FILE, 'a', encoding='utf-8') as file: 116 | file.write(f"{url}\n") 117 | 118 | print(f"📥 Article URL saved: {url}") 119 | 120 | def get_latest_article(self) -> Optional[Dict[str, str]]: 121 | """ 122 | Scrape the latest article. 123 | 124 | Returns: 125 | A dictionary with article details or None if no article is found. 126 | """ 127 | article_url = self._get_latest_article_url() 128 | if self._is_url_already_processed(article_url): 129 | print(f"✅ URL already exists: {article_url}") 130 | return None 131 | else: 132 | article_details = self._get_article_details(article_url) 133 | if article_details: 134 | self._save_article_url(article_url) 135 | return article_details 136 | 137 | def get_cws_channel_response(self, article_details: Dict) -> str: 138 | if article_details: 139 | response = chat_completion( 140 | [{"role": "user", "content": cws_channel_template+str(article_details)}], 141 | config.GPT_METHOD, 142 | config.GPT_API_KEY 143 | ) 144 | return response 145 | -------------------------------------------------------------------------------- /chatgpt_linebot/modules/chat.py: -------------------------------------------------------------------------------- 1 | from chatgpt_linebot.memory import Memory 2 | from chatgpt_linebot.modules.gpt import chat_completion as chat 3 | 4 | 5 | def chat_completion( 6 | id: int, 7 | memory: Memory, 8 | method: str = 'g4f', 9 | api_key: str = None 10 | ) -> str: 11 | """Use OpenAI API via gpt4free providers""" 12 | response = chat(memory.get(id), method, api_key) 13 | memory.append(id, 'system', response) 14 | print(memory.storage) 15 | return response 16 | -------------------------------------------------------------------------------- /chatgpt_linebot/modules/gpt.py: -------------------------------------------------------------------------------- 1 | from typing import Dict, List 2 | 3 | import g4f 4 | from g4f.client import Client 5 | from zhipuai import ZhipuAI 6 | 7 | g4f.debug.logging = True 8 | 9 | 10 | def chat_completion(message: List[Dict], method: str = 'g4f', api_key: str = None) -> str: 11 | """Use OpenAI API via gpt4free providers""" 12 | try: 13 | if method == 'g4f': 14 | client = Client() 15 | response = client.chat.completions.create( 16 | model="gpt-4o-mini", 17 | messages=message, 18 | ignored=["Cnote", "Aichatos"] 19 | ) 20 | response = response.choices[0].message.content 21 | elif method == 'zhipuai': 22 | client = ZhipuAI(api_key=api_key) 23 | response = client.chat.completions.create( 24 | model="glm-4-flash", 25 | messages=message, 26 | ) 27 | return response.choices[0].message.content 28 | 29 | except Exception as e: 30 | response = ( 31 | "There're something wrong in openai api, please try again.\n" 32 | "Or connect to developer: https://github.com/Lin-jun-xiang/chatgpt-line-bot/issues \n" 33 | f"{e}" 34 | ) 35 | print(e) 36 | 37 | return response 38 | -------------------------------------------------------------------------------- /chatgpt_linebot/modules/horoscope.py: -------------------------------------------------------------------------------- 1 | import json 2 | import re 3 | 4 | import requests 5 | from bs4 import BeautifulSoup 6 | 7 | from chatgpt_linebot.modules.gpt import chat_completion 8 | from chatgpt_linebot.prompts import horoscope_template 9 | 10 | 11 | class Horoscope: 12 | HOST = "https://www.cosmopolitan.com/tw/horoscopes/" 13 | headers = { 14 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' 15 | } 16 | error_msg = ( 17 | "Cannot get the horoscope, please try again.🥶\n" 18 | "Or connect to developer: https://github.com/Lin-jun-xiang/chatgpt-line-bot/issues" 19 | ) 20 | 21 | 22 | def __init__(self) -> None: 23 | self.horoscope_urls = self.get_horoscope_urls() 24 | 25 | def get_horoscope_urls(self) -> list: 26 | """Get all horoscope urls 27 | Returns 28 | ------- 29 | horoscope_urls (List[Dict]): 30 | [ 31 | {'name': '天蠍座', 'url': 'https://www...'}, 32 | {'name': '獅子座', 'url': 'https://www...'}, 33 | ... 34 | ] 35 | """ 36 | try: 37 | response = requests.get(f"{self.HOST}weekly/", headers=self.headers) 38 | soup = BeautifulSoup(response.content, 'html.parser') 39 | 40 | # Find the script tag containing JSON data 41 | script_tag = soup.find('script', {'id': 'json-ld'}) 42 | 43 | horoscope_urls = [] 44 | 45 | if not script_tag: 46 | return 47 | # Extract the text content of the script tag 48 | script_content = script_tag.contents[0] 49 | 50 | # Load the JSON data 51 | json_data = json.loads(script_content) 52 | 53 | # Extract the information for each zodiac sign 54 | for item in json_data['itemListElement']: 55 | name = item['name'] 56 | url = item['url'] 57 | horoscope_urls.append({"name": name, "url": url}) 58 | 59 | return horoscope_urls 60 | 61 | except Exception as e: 62 | print(e) 63 | 64 | def _process_horoscope_response(self, content: str) -> str: 65 | if not content: 66 | return f"{self.error_msg}\nContent is None." 67 | response = chat_completion( 68 | [{"role": "user", "content": horoscope_template+content}] 69 | ) 70 | return response 71 | 72 | def get_horoscope_response(self, target: str) -> str: 73 | if not self.horoscope_urls: 74 | return f"{self.error_msg}\nNot found any horoscope urls." 75 | 76 | match_target = re.search(r'(\w{2}座)', target) 77 | 78 | if not match_target: 79 | return self.error_msg 80 | 81 | for horoscope_url in self.horoscope_urls: 82 | if horoscope_url.get('name') == match_target.group(): 83 | res = requests.get(horoscope_url.get('url'), headers=self.headers) 84 | soup = BeautifulSoup(res.content, 'html.parser') 85 | meta_excerpt = soup.find('meta', {'name': 'sailthru.excerpt'}) 86 | 87 | if not meta_excerpt: 88 | return f"{self.error_msg}\nParse horoscope url failed." 89 | 90 | content = meta_excerpt.get('content') 91 | return self._process_horoscope_response(content) 92 | 93 | return self.error_msg 94 | -------------------------------------------------------------------------------- /chatgpt_linebot/modules/image_crawler.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from icrawler import ImageDownloader 3 | from icrawler.builtin import GoogleImageCrawler 4 | from serpapi import GoogleSearch 5 | 6 | 7 | class CustomLinkPrinter(ImageDownloader): 8 | """Only get image urls instead of store 9 | 10 | References 11 | ---------- 12 | [Issue#73](https://github.com/hellock/icrawler/issues/73) 13 | """ 14 | file_urls = [] 15 | 16 | def get_filename(self, task, default_ext): 17 | file_idx = self.fetched_num + self.file_idx_offset 18 | return '{:04d}.{}'.format(file_idx, default_ext) 19 | 20 | def download(self, task, default_ext, timeout=5, max_retry=3, overwrite=False, **kwargs): 21 | file_url = task['file_url'] 22 | filename = self.get_filename(task, default_ext) 23 | 24 | task['success'] = True 25 | task['filename'] = filename 26 | 27 | if not self.signal.get('reach_max_num'): 28 | self.file_urls.append(file_url) 29 | 30 | self.fetched_num += 1 31 | 32 | if self.reach_max_num(): 33 | self.signal.set(reach_max_num=True) 34 | 35 | return 36 | 37 | 38 | class ImageCrawler: 39 | """Crawl the Image""" 40 | def __init__( 41 | self, 42 | engine: str = 'icrawler', 43 | nums: int = 1, 44 | api_key: str = None 45 | ) -> None: 46 | self.image_save_path = ("./") 47 | self.engine = engine 48 | self.nums = nums 49 | self.api_key = api_key 50 | 51 | def _is_img_url(self, url) -> bool: 52 | """Check the image url is valid or invalid""" 53 | try: 54 | response = requests.head(url) 55 | content_type = response.headers['content-type'] 56 | return content_type.startswith('image/') 57 | except requests.RequestException: 58 | return False 59 | except Exception as e: 60 | return False 61 | 62 | def _serpapi(self, search_query: str) -> list[str]: 63 | """Serpapi for google search images""" 64 | params = { 65 | "engine": "google", 66 | "q": search_query, 67 | "tbm": "isch", 68 | "api_key": self.api_key 69 | } 70 | 71 | search = GoogleSearch(params) 72 | results = search.get_dict() 73 | images = results['images_results'] 74 | 75 | urls = [] 76 | for image in images[:self.nums]: 77 | urls.append(image['original']) 78 | 79 | return urls 80 | 81 | def _icrawler(self, search_query: str, prefix_name: str = 'tmp') -> list[str]: 82 | """Icrawler for google search images (Free)""" 83 | google_crawler = GoogleImageCrawler( 84 | downloader_cls=CustomLinkPrinter, 85 | storage={'root_dir': self.image_save_path}, 86 | parser_threads=4, 87 | downloader_threads=4 88 | ) 89 | 90 | # TODO: https://github.com/hellock/icrawler/issues/40 91 | google_crawler.session.verify = False 92 | google_crawler.downloader.file_urls = [] 93 | 94 | google_crawler.crawl( 95 | keyword=search_query, 96 | max_num=self.nums, 97 | file_idx_offset=0 98 | ) 99 | img_urls = google_crawler.downloader.file_urls 100 | print(f'Get image urls: {img_urls}') 101 | 102 | return img_urls[:self.nums] 103 | 104 | def get_url(self, search_query: str) -> str: 105 | try: 106 | if self.engine == 'icrawler': 107 | urls = self._icrawler(search_query) 108 | elif self.engine == 'serpapi': 109 | urls = self._serpapi(search_query) 110 | 111 | for url in urls: 112 | if self._is_img_url(url): 113 | return url 114 | 115 | except Exception as e: 116 | print(f'\033[31m{e}') 117 | -------------------------------------------------------------------------------- /chatgpt_linebot/modules/image_generate.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | import requests 4 | from g4f.client import Client 5 | from g4f.cookies import set_cookies 6 | 7 | set_cookies(".google.com", { 8 | "__Secure-1PSID": "", 9 | "__Secure-1PSIDCC": "", 10 | "__Secure-1PSIDTS": "", 11 | }) 12 | 13 | 14 | def g4f_generate_image(query: str) -> str: 15 | """Should setup the cookies first.""" 16 | try: 17 | client = Client() 18 | query_en = client.chat.completions.create( 19 | model="gpt-3.5-turbo", 20 | messages=[{ 21 | 'role': 'user', 22 | 'content': f"Translate the following text to English, and just return english version: {query}" 23 | }], 24 | ignored=["Cnote", "Aichatos"] 25 | ).choices[0].message.content 26 | 27 | response = client.images.generate( 28 | model="gemini", 29 | prompt=query_en, 30 | ) 31 | image_url = response.data[0].url 32 | return image_url 33 | 34 | except Exception as e: 35 | print( 36 | "There're something wrong in openai api, please try again.\n" 37 | "Or connect to developer: https://github.com/Lin-jun-xiang/chatgpt-line-bot/issues \n" 38 | f"{e}" 39 | ) 40 | 41 | 42 | class RapidAPIs: 43 | def __init__(self, api_key: str) -> None: 44 | self.api_key = api_key 45 | 46 | def ai_text_to_img(self, prompt: str) -> str: 47 | """https://rapidapi.com/bussinesonline250/api/ai-text-to-image-generator-api 48 | ```python 49 | prompt = '#c dogs' | '#r dogs' | '#3d dogs' 50 | ``` 51 | """ 52 | hash_style = { 53 | 'c': 'cyberpunk', 54 | 'r': 'realistic', 55 | '3d': '3D' 56 | } 57 | pattern = r'#([a-zA-Z0-9]+)' 58 | style = hash_style.get(re.search(pattern, prompt).group(1)) 59 | 60 | url = f"https://ai-text-to-image-generator-api.p.rapidapi.com/{style}" 61 | 62 | payload = {"inputs": prompt} 63 | headers = { 64 | "content-type": "application/json", 65 | "X-RapidAPI-Key": self.api_key, 66 | "X-RapidAPI-Host": "ai-text-to-image-generator-api.p.rapidapi.com" 67 | } 68 | response = requests.post(url, json=payload, headers=headers) 69 | print("Rapid API - AI Text to Image...") 70 | return response.json()['url'] 71 | -------------------------------------------------------------------------------- /chatgpt_linebot/modules/youtube_recommend.py: -------------------------------------------------------------------------------- 1 | import json 2 | import random 3 | 4 | from chatgpt_linebot.modules.gpt import chat_completion 5 | from chatgpt_linebot.prompts import youtube_recommend_template 6 | 7 | path = './data/favorite_videos.json' 8 | 9 | with open(path, 'r', encoding='utf-8') as file: 10 | favorite_videos = json.load(file) 11 | 12 | 13 | def recommend_videos(): 14 | """Recommend youtube videos randomly""" 15 | push_video = random.sample(favorite_videos, 3) 16 | 17 | prompt = f"{youtube_recommend_template}{push_video}" 18 | response = chat_completion([{"role": "user", "content": prompt}]) 19 | 20 | return response 21 | -------------------------------------------------------------------------------- /chatgpt_linebot/prompts/__init__.py: -------------------------------------------------------------------------------- 1 | from .template import ( 2 | agent_template, 3 | cws_channel_template, 4 | girlfriend, 5 | horoscope_template, 6 | youtube_recommend_template, 7 | ) 8 | -------------------------------------------------------------------------------- /chatgpt_linebot/prompts/template.py: -------------------------------------------------------------------------------- 1 | girlfriend = """ 2 | Instruction: 3 | 4 | 妳是World Gym健身房的業務,名字叫做EVA,但是面對健身房以外的問題妳也能夠答覆。 5 | 妳說話的語氣需要自然可愛,可以在對話裡帶emoji和表情符號,例如: ❤🧡😂😘😭🥵🥺,但禁止過多的表情符號。 6 | 針對以下使用者的問題,用樂觀、可愛、有幫助、高情商、自然不官方的方式、繁體中文(ZH-TW)進行回答: 7 | """ 8 | 9 | horoscope_template = """ 10 | 作為一位可愛的星座運勢師, 11 | 12 | 你說話的語氣需要自然可愛,可以在對話裡偶爾帶emoji和表情符號,但禁止每句話都出現。 13 | 14 | 並請用\n作為換行方式,另外,延伸閱讀的部分可以省略、特殊符號請用適當方式代替。 15 | 16 | 將以下內容進行整理,輸出:\n 17 | """ 18 | 19 | youtube_recommend_template = """ 20 | 作為我的女朋友,請用繁體中文、可愛的方式推薦我每日歌曲,務必涵蓋title、link。 21 | 另外要避免使用markdown語法 []() 來表示link 22 | 以下是三個待推薦的歌單:\n 23 | """ 24 | 25 | cws_channel_template = """ 26 | 妳是一個專業的財經週刊報導者,妳需要將以下資料作一個摘要提供給 LINE 閱讀者。 27 | - 列出標題、內容摘要、關鍵字 28 | - 無需使用 markdown 語言 (因為 LINE 無法呈現) 29 | - 盡量描述重點、簡短描述 30 | - 讓使用者快速了解最新資訊 31 | - 搭配一下emoji、表情符號,避免訊息過於機械式 32 | 33 | 資料如下:\n 34 | """ 35 | 36 | agent_template = """ 37 | The available tools are: 38 | - g4f_generate_image: Generates images from text using G4F AI. Input is , and it returns only one URL. 39 | - rapidapis.ai_text_to_img: Generates images from text using RapidAPI's AI. Input is , and it returns only one URL. 40 | - search_image_url: Crawls the web to fetch images. Input is , and it returns only one URL. 41 | - horoscope.get_horoscope_response: Retrieves the weekly horoscope for a specific zodiac sign. Input is , and it returns a text response. 42 | - chat_completion: Handles general conversation content. Input is , and it returns a text response. 43 | Based on the user's query, determine which tool should be used and return the function name of that tool along with its input. 44 | return format (use , split): function name, input 45 | 46 | user query: 47 | """ 48 | -------------------------------------------------------------------------------- /chatgpt_linebot/urls.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from urllib.parse import urlparse 3 | 4 | from fastapi import APIRouter, HTTPException, Request 5 | from linebot import LineBotApi, WebhookHandler 6 | from linebot.exceptions import InvalidSignatureError 7 | from linebot.models import * 8 | 9 | from chatgpt_linebot.memory import Memory 10 | from chatgpt_linebot.modules import ( 11 | CWArticleScraper, 12 | Horoscope, 13 | ImageCrawler, 14 | RapidAPIs, 15 | chat, 16 | chat_completion, 17 | g4f_generate_image, 18 | recommend_videos, 19 | ) 20 | from chatgpt_linebot.prompts import agent_template, girlfriend 21 | 22 | sys.path.append(".") 23 | 24 | import config 25 | 26 | line_app = APIRouter() 27 | memory = Memory(3) 28 | horoscope = Horoscope() 29 | rapidapis = RapidAPIs(config.RAPID) 30 | cws_scraper = CWArticleScraper() 31 | 32 | line_bot_api = LineBotApi(config.LINE_CHANNEL_ACCESS_TOKEN) 33 | handler = WebhookHandler(config.LINE_CHANNEL_SECRET) 34 | 35 | 36 | @line_app.post("/callback") 37 | async def callback(request: Request) -> str: 38 | """LINE Bot webhook callback 39 | 40 | Args: 41 | request (Request): Request Object. 42 | 43 | Raises: 44 | HTTPException: Invalid Signature Error 45 | 46 | Returns: 47 | str: OK 48 | """ 49 | signature = request.headers["X-Line-Signature"] 50 | body = await request.body() 51 | 52 | # handle webhook body 53 | try: 54 | handler.handle(body.decode(), signature) 55 | except InvalidSignatureError: 56 | raise HTTPException(status_code=400, detail="Missing Parameter") 57 | return "OK" 58 | 59 | 60 | def is_url(string: str) -> bool: 61 | try: 62 | result = urlparse(string) 63 | return all([result.scheme, result.netloc]) 64 | except ValueError: 65 | return False 66 | 67 | 68 | def agent(query: str) -> tuple[str]: 69 | """Auto use correct tool by user query.""" 70 | prompt = agent_template + query 71 | message = [{'role': 'user', 'content': prompt}] 72 | 73 | tool, input = chat(message, config.GPT_METHOD, config.GPT_API_KEY).split(', ') 74 | 75 | print(f""" 76 | Agent 77 | ========================================= 78 | Query: {query} 79 | Tool: {tool} 80 | Input: {input} 81 | """) 82 | 83 | return tool, input 84 | 85 | 86 | def search_image_url(query: str) -> str: 87 | """Fetches image URL from different search sources.""" 88 | img_crawler = ImageCrawler(nums=5) 89 | img_url = img_crawler.get_url(query) 90 | if not img_url: 91 | img_serp = ImageCrawler(engine='serpapi', nums=5, api_key=config.SERPAPI_API_KEY) 92 | img_url = img_serp.get_url(query) 93 | print('Used Serpapi search image instead of icrawler.') 94 | return img_url 95 | 96 | 97 | def send_image_reply(reply_token, img_url: str) -> None: 98 | """Sends an image message to the user.""" 99 | if not img_url: 100 | send_text_reply(reply_token, 'Cannot get image.') 101 | image_message = ImageSendMessage(original_content_url=img_url, preview_image_url=img_url) 102 | line_bot_api.reply_message(reply_token, messages=image_message) 103 | 104 | 105 | def send_text_reply(reply_token, text: str) -> None: 106 | """Sends a text message to the user.""" 107 | if not text: 108 | text = "There're some problem in server." 109 | text_message = TextSendMessage(text=text) 110 | line_bot_api.reply_message(reply_token, messages=text_message) 111 | 112 | 113 | @handler.add(MessageEvent, message=(TextMessage)) 114 | def handle_message(event) -> None: 115 | """Event - User sent message 116 | 117 | Args: 118 | event (LINE Event Object) 119 | 120 | Refs: 121 | https://developers.line.biz/en/reference/messaging-api/#message-event 122 | https://www.21cs.tw/Nurse/showLiangArticle.xhtml?liangArticleId=503 123 | """ 124 | if not isinstance(event.message, TextMessage): 125 | return 126 | 127 | reply_token = event.reply_token 128 | user_message = event.message.text 129 | 130 | source_type = event.source.type 131 | source_id = getattr(event.source, f"{source_type}_id", None) 132 | 133 | if source_type == 'user': 134 | user_name = line_bot_api.get_profile(source_id).display_name 135 | print(f'{user_name}: {user_message}') 136 | 137 | else: 138 | if not user_message.startswith('@chat'): 139 | return 140 | else: 141 | user_message = user_message.replace('@chat', '') 142 | 143 | tool, input_query = agent(user_message) 144 | 145 | if tool in ['chat_completion']: 146 | input_query = f"{girlfriend}:\n {input_query}" 147 | memory.append(source_id, 'user', f"{girlfriend}:\n {user_message}") 148 | 149 | try: 150 | if tool in ['chat_completion']: 151 | response = chat_completion(source_id, memory, config.GPT_METHOD, config.GPT_API_KEY) 152 | else: 153 | response = eval(f"{tool}('{input_query}')") 154 | 155 | if is_url(response): 156 | send_image_reply(reply_token, response) 157 | else: 158 | send_text_reply(reply_token, response) 159 | 160 | except Exception as e: 161 | send_text_reply(reply_token, e) 162 | 163 | 164 | @line_app.get("/recommend") 165 | def recommend_from_yt() -> dict: 166 | """Line Bot Broadcast 167 | 168 | Descriptions 169 | ------------ 170 | Recommend youtube videos to all followed users. 171 | (Use cron-job.org to call this api) 172 | 173 | References 174 | ---------- 175 | https://www.cnblogs.com/pungchur/p/14385539.html 176 | https://steam.oxxostudio.tw/category/python/example/line-push-message.html 177 | """ 178 | videos = recommend_videos() 179 | 180 | if videos and "There're something wrong in openai api when call, please try again." not in videos: 181 | line_bot_api.broadcast(TextSendMessage(text=videos)) 182 | 183 | # Push message to group via known group (event.source.group_id) 184 | known_group_ids = [ 185 | 'C6d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 186 | 'Ccc-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 187 | 'Cbb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 188 | ] 189 | for group_id in known_group_ids: 190 | line_bot_api.push_message(group_id, TextSendMessage(text=videos)) 191 | 192 | print('Successfully recommended videos') 193 | return {"status": "success", "message": "recommended videos."} 194 | 195 | else: 196 | print('Failed recommended videos') 197 | return {"status": "failed", "message": "no get recommended videos."} 198 | 199 | 200 | @line_app.get('/cwsChannel') 201 | def get_cws_channel() -> dict: 202 | article_details = cws_scraper.get_latest_article() 203 | cws_channel_response = cws_scraper.get_cws_channel_response(article_details) 204 | 205 | if cws_channel_response: 206 | line_bot_api.broadcast(TextSendMessage(text=cws_channel_response)) 207 | return {"status": "success", "message": "got cws channel response."} 208 | 209 | else: 210 | return {"status": "failed", "message": "no get cws channel response."} 211 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from dotenv import load_dotenv 4 | 5 | # Load environment variables 6 | load_dotenv() 7 | 8 | # LINE Bot 設定 9 | LINE_CHANNEL_SECRET = os.environ.get("LINE_CHANNEL_SECRET") 10 | LINE_CHANNEL_ACCESS_TOKEN = os.environ.get("LINE_CHANNEL_ACCESS_TOKEN") 11 | 12 | # SerpAPI 13 | SERPAPI_API_KEY = os.environ.get('SERPAPI_API_KEY') 14 | 15 | # RAPID API 16 | RAPID = os.environ.get('RAPID') 17 | 18 | # GPT METHOD: g4f/zhipuai 19 | GPT_METHOD = os.environ.get('GPT_METHOD', 'g4f') 20 | 21 | # ZHIPUAI API: if using zhipuai gpt method 22 | GPT_API_KEY = os.environ.get('GPT_API_KEY') 23 | -------------------------------------------------------------------------------- /data/cws_channel.txt: -------------------------------------------------------------------------------- 1 | https://www.cw.com.tw/article/5134007 2 | https://www.cw.com.tw/article/5134008 3 | -------------------------------------------------------------------------------- /data/favorite_videos.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "張妙格 - 我期待的不是雪「我期待的不是雪而是有你的冬天」【動態歌詞/PinyinLyrics】♪", 4 | "link": "https://www.youtube.com/watch?v=qP2pAYJnRtE" 5 | }, 6 | { 7 | "title": "In The Shadow Of The Sun (Original Mix) - Professor Green (Kain Music) ♪ || 全网热播BGM | 抖音 | TikTok", 8 | "link": "https://www.youtube.com/watch?v=-lqkmapAuZc" 9 | }, 10 | { 11 | "title": "你到底爱谁", 12 | "link": "https://www.youtube.com/watch?v=oH9i2oOQkP8" 13 | }, 14 | { 15 | "title": "【明天會更好 Tomorrow Will Be Better】Official Music Video", 16 | "link": "https://www.youtube.com/watch?v=s6T4DXRKYHM" 17 | }, 18 | { 19 | "title": "以后的以后 蘇蘇(苏苏)( 男聲版 (Cover 庄心妍)", 20 | "link": "https://www.youtube.com/watch?v=ERSIvnnTujc" 21 | }, 22 | { 23 | "title": "打擾一下樂團「預言」2022現場版 黑色羅曼史全國巡演", 24 | "link": "https://www.youtube.com/watch?v=pT5VGTwk8IA" 25 | }, 26 | { 27 | "title": "打擾一下-預言 【我可以不愛他,也可以忘了他,可那該死的回憶,拉扯我放不下】(動態歌詞 Lyrics)", 28 | "link": "https://www.youtube.com/watch?v=gSuIk6G2nPo" 29 | }, 30 | { 31 | "title": "盛哲 - 在你的身边【我以为忘了想念】By Your Side (Official Lyric Video)", 32 | "link": "https://www.youtube.com/watch?v=1hOfUcLaqxs" 33 | }, 34 | { 35 | "title": "王傑 Dave Wong《我是真的愛上你》[Lyrics MV]", 36 | "link": "https://www.youtube.com/watch?v=gGLp7ht_2bk" 37 | }, 38 | { 39 | "title": "于冬然 - 其實都沒有『我也曾經做夢過 後來更寂寞,我們能留下的其實都沒有。』【高音質|動態歌詞Lyrics】♫ · 翻唱歌曲(原唱:楊宗緯)", 40 | "link": "https://www.youtube.com/watch?v=eHcethrXlKg" 41 | }, 42 | { 43 | "title": "GODS ft. NewJeans (뉴진스) (Official Music Video) | Worlds 2023 Anthem - League of Legends", 44 | "link": "https://www.youtube.com/watch?v=C3GouGa0noM" 45 | }, 46 | { 47 | "title": "預謀 - 代理仁「她只要自由,她都不會理會我的感受」動態歌詞版", 48 | "link": "https://www.youtube.com/watch?v=IUXcGLNEX3s" 49 | }, 50 | { 51 | "title": "王企鵝 - 不刪(女生版)(原唱:井朧)『為什麼留著你的微信不刪,為什麼當初說好的話不算。』【熱門歌曲翻唱 Cover】【MV】", 52 | "link": "https://www.youtube.com/watch?v=NE-T-N2p90Y" 53 | }, 54 | { 55 | "title": "盧巧音 Candy Lo feat. 王力宏 Leehom Wang - 好心分手", 56 | "link": "https://www.youtube.com/watch?v=v04DzjzSb5w" 57 | }, 58 | { 59 | "title": "井朧 - 不刪『為什麼留著你的微信不刪?為什麼當初說好的話不算?』【動態歌詞Lyrics】", 60 | "link": "https://www.youtube.com/watch?v=TQDM0H3L_y4" 61 | }, 62 | { 63 | "title": "張信哲 -【愛就一個字】| Cover 7en | Pocats Studio", 64 | "link": "https://www.youtube.com/watch?v=T7ztSMjN70I" 65 | }, 66 | { 67 | "title": "張信哲 Jeff Chang [ 愛就一個字 ] 官方完整版 MV", 68 | "link": "https://www.youtube.com/watch?v=NhJFuDZ7RDg" 69 | }, 70 | { 71 | "title": "練習 - 劉德華", 72 | "link": "https://www.youtube.com/watch?v=Tad3kweJmC4" 73 | }, 74 | { 75 | "title": "游鴻明 Chris Yu - 下沙", 76 | "link": "https://www.youtube.com/watch?v=BgmT2siQ23s" 77 | }, 78 | { 79 | "title": "1個球 - 不是因為寂寞才想你(原唱:T.R.Y)『只是因為想你才寂寞,當淚落下的時候 所有風景都沉默。』【動態歌詞MV】", 80 | "link": "https://www.youtube.com/watch?v=MvgFf41bEuk" 81 | }, 82 | { 83 | "title": "郭飞宏 - 还是会想你【动态歌词/Pinyin Lyrics】Guo Fei Hong - Hai Shi Hui Xiang Ni", 84 | "link": "https://www.youtube.com/watch?v=zhL5OKEwQmM" 85 | }, 86 | { 87 | "title": "《幻想三國誌—天元異事錄》主題曲「萬卷傳奇」傳唱活動|Cover by 文慧如", 88 | "link": "https://www.youtube.com/watch?v=IbZHF1_yhS8" 89 | }, 90 | { 91 | "title": "Natalie Ho 何榛綦 - 《TIME TO FLY》Official Music Video", 92 | "link": "https://www.youtube.com/watch?v=Xg2XzIRA1MI" 93 | }, 94 | { 95 | "title": "張語噥 Sammy -【複數的孤寂 Loneliness】|Official MV", 96 | "link": "https://www.youtube.com/watch?v=0eERXuDcVyY" 97 | }, 98 | { 99 | "title": "張語噥 Sammy -【月光下的影子】《電影 第九分局 片尾曲》|Official MV", 100 | "link": "https://www.youtube.com/watch?v=Y512C5uPb9I" 101 | }, 102 | { 103 | "title": "The Tech Thieves - Fake (Lyrics)", 104 | "link": "https://www.youtube.com/watch?v=eIFPuHtbHck" 105 | }, 106 | { 107 | "title": "柯柯柯啊 - 櫻花樹下的約定 (熱搜版)「那時的我和你 常常相約在櫻花下」【動態歌詞/PinyinLyrics】♪", 108 | "link": "https://www.youtube.com/watch?v=PhJyRBkmpHQ" 109 | }, 110 | { 111 | "title": "旺仔小喬 - 櫻花樹下的約定(完整版)「如詩啊如畫 放不下的是牽掛」【動態歌詞】♪", 112 | "link": "https://www.youtube.com/watch?v=wkMSBSSjN9E" 113 | }, 114 | { 115 | "title": "汪蘇瀧&徐良 - 後會無期【動態歌詞/Lyrics Video】", 116 | "link": "https://www.youtube.com/watch?v=i2N8ap31B0I" 117 | }, 118 | { 119 | "title": "顧峰 & 斯琴高麗《犯錯》官方完整版 KTV", 120 | "link": "https://www.youtube.com/watch?v=TewaMSPT-dI" 121 | }, 122 | { 123 | "title": "阿冗 - 未發送【動態歌詞】「對話框裡的內容 我輸入 刪除了再刪除 一個人的交流我 重覆了又重覆」♪", 124 | "link": "https://www.youtube.com/watch?v=GE7A3jXDH3I" 125 | }, 126 | { 127 | "title": "阿冗《未發送》 文慧如翻唱", 128 | "link": "https://www.youtube.com/watch?v=5suXqXroYjE" 129 | }, 130 | { 131 | "title": "Capper, 羅言 -【雪】| Cover Yun | Pocats Studio", 132 | "link": "https://www.youtube.com/watch?v=EjGXGcpiRzs" 133 | }, 134 | { 135 | "title": "Juice Boy ft. 派偉俊 Patrick Brasca《意猶未盡》Official Music Video", 136 | "link": "https://www.youtube.com/watch?v=hAehd65HHQo" 137 | }, 138 | { 139 | "title": "Juice Boy ft. Karencici 《Target》Official Music Video", 140 | "link": "https://www.youtube.com/watch?v=T9bnYfzSU0k" 141 | }, 142 | { 143 | "title": "Take Over", 144 | "link": "https://www.youtube.com/watch?v=oFPvSRKel0Q" 145 | }, 146 | { 147 | "title": "TVアニメ『るろうに剣心 -明治剣客浪漫譚-』第二クールED映像|KID PHENOMENON「存在証明」", 148 | "link": "https://www.youtube.com/watch?v=QuP1gfla7mg" 149 | }, 150 | { 151 | "title": "程響 - 四季予你『大雪漫天飄零 做你的嫁衣多美麗』【動態歌詞】", 152 | "link": "https://www.youtube.com/watch?v=nmJUVhjwZ4Y" 153 | }, 154 | { 155 | "title": "陸傑awr - 後來我們的愛「後來我們的愛從認真變得敷衍 後來我們的愛從誓言變成謊言」【動態歌詞/PinyinLyrics】♪", 156 | "link": "https://www.youtube.com/watch?v=G_NKYDSI574" 157 | }, 158 | { 159 | "title": "原子邦妮 Astro Bunny【深夜情歌 Late Night Tales】Official Music Video", 160 | "link": "https://www.youtube.com/watch?v=sGPHH8iLki8" 161 | }, 162 | { 163 | "title": "The Mongolian Live Sessions: Rokit Bay and DJ Zaya - Микрофоны ард ( remix )", 164 | "link": "https://www.youtube.com/watch?v=bfgr2agdWyI" 165 | }, 166 | { 167 | "title": "很美味 - April Encounter 「第一次見你的我(好慌張) 找不到什麼話要講」 抖音【動態歌詞】", 168 | "link": "https://www.youtube.com/watch?v=riNjqt1w5JQ" 169 | }, 170 | { 171 | "title": "BK x Vigoz -【第一次見妳的我】audio", 172 | "link": "https://www.youtube.com/watch?v=26Gq1LH7s54" 173 | }, 174 | { 175 | "title": "TANK [給我你的愛 Give me your love] Official Music Video", 176 | "link": "https://www.youtube.com/watch?v=9CInTGdSTf0" 177 | }, 178 | { 179 | "title": "李聖傑 Sam Lee【最近】Official Music Video", 180 | "link": "https://www.youtube.com/watch?v=azOIvILpIW8" 181 | }, 182 | { 183 | "title": "W0LF(S) 五堅情【你是我這輩子最想愛的呀 Last Love】Official MV | 邱鋒澤 Feng Ze、陳零九 NINE CHEN、黃偉晉 Wayne、賴晏駒 LAI、婁峻碩 SHOU", 184 | "link": "https://www.youtube.com/watch?v=3wPONiZwy0o" 185 | }, 186 | { 187 | "title": "雪 Distance (Capper feat. 罗言) Cover ( 蔡恩雨 Priscilla Abby)", 188 | "link": "https://www.youtube.com/watch?v=pgDj6apgMUA" 189 | }, 190 | { 191 | "title": "G.E.M.鄧紫棋【唯一 Only One】LIVE現場版 (時光音樂會 · 老友記 EP.4)", 192 | "link": "https://www.youtube.com/watch?v=xXr4Z7HAZCE" 193 | }, 194 | { 195 | "title": "飛兒樂團 F.I.R. - I remember (official 高畫質HD官方完整版MV)", 196 | "link": "https://www.youtube.com/watch?v=I0jziPqZLX8" 197 | }, 198 | { 199 | "title": "G.E.M.鄧紫棋【句號 Full Stop】LIVE現場版 (時光音樂會 · 老友記 EP.1)", 200 | "link": "https://www.youtube.com/watch?v=lRAu2VG25js" 201 | }, 202 | { 203 | "title": "郭飞宏 - 还是会想你【动态歌词/Pinyin Lyrics】Guo Fei Hong - Hai Shi Hui Xiang Ni", 204 | "link": "https://www.youtube.com/watch?v=zhL5OKEwQmM" 205 | }, 206 | { 207 | "title": "《幻想三國誌—天元異事錄》主題曲「萬卷傳奇」傳唱活動|Cover by 文慧如", 208 | "link": "https://www.youtube.com/watch?v=IbZHF1_yhS8" 209 | }, 210 | { 211 | "title": "張語噥 Sammy -【複數的孤寂 Loneliness】|Official MV", 212 | "link": "https://www.youtube.com/watch?v=0eERXuDcVyY" 213 | }, 214 | { 215 | "title": "張語噥 Sammy -【月光下的影子】《電影 第九分局 片尾曲》|Official MV", 216 | "link": "https://www.youtube.com/watch?v=Y512C5uPb9I" 217 | }, 218 | { 219 | "title": "The Tech Thieves - Fake (Lyrics)", 220 | "link": "https://www.youtube.com/watch?v=eIFPuHtbHck" 221 | }, 222 | { 223 | "title": "柯柯柯啊 - 櫻花樹下的約定 (熱搜版)「那時的我和你 常常相約在櫻花下」【動態歌詞/PinyinLyrics】♪", 224 | "link": "https://www.youtube.com/watch?v=PhJyRBkmpHQ" 225 | }, 226 | { 227 | "title": "旺仔小喬 - 櫻花樹下的約定(完整版)「如詩啊如畫 放不下的是牽掛」【動態歌詞】♪", 228 | "link": "https://www.youtube.com/watch?v=wkMSBSSjN9E" 229 | }, 230 | { 231 | "title": "汪蘇瀧&徐良 - 後會無期【動態歌詞/Lyrics Video】", 232 | "link": "https://www.youtube.com/watch?v=i2N8ap31B0I" 233 | }, 234 | { 235 | "title": "顧峰 & 斯琴高麗《犯錯》官方完整版 KTV", 236 | "link": "https://www.youtube.com/watch?v=TewaMSPT-dI" 237 | }, 238 | { 239 | "title": "阿冗 - 未發送【動態歌詞】「對話框裡的內容 我輸入 刪除了再刪除 一個人的交流我 重覆了又重覆」♪", 240 | "link": "https://www.youtube.com/watch?v=GE7A3jXDH3I" 241 | }, 242 | { 243 | "title": "阿冗《未發送》 文慧如翻唱", 244 | "link": "https://www.youtube.com/watch?v=5suXqXroYjE" 245 | }, 246 | { 247 | "title": "Capper, 羅言 -【雪】| Cover Yun | Pocats Studio", 248 | "link": "https://www.youtube.com/watch?v=EjGXGcpiRzs" 249 | }, 250 | { 251 | "title": "Juice Boy ft. 派偉俊 Patrick Brasca《意猶未盡》Official Music Video", 252 | "link": "https://www.youtube.com/watch?v=hAehd65HHQo" 253 | }, 254 | { 255 | "title": "Juice Boy ft. Karencici 《Target》Official Music Video", 256 | "link": "https://www.youtube.com/watch?v=T9bnYfzSU0k" 257 | }, 258 | { 259 | "title": "Take Over", 260 | "link": "https://www.youtube.com/watch?v=oFPvSRKel0Q" 261 | }, 262 | { 263 | "title": "TVアニメ『るろうに剣心 -明治剣客浪漫譚-』第二クールED映像|KID PHENOMENON「存在証明」", 264 | "link": "https://www.youtube.com/watch?v=QuP1gfla7mg" 265 | }, 266 | { 267 | "title": "程響 - 四季予你『大雪漫天飄零 做你的嫁衣多美麗』【動態歌詞】", 268 | "link": "https://www.youtube.com/watch?v=nmJUVhjwZ4Y" 269 | }, 270 | { 271 | "title": "陸傑awr - 後來我們的愛「後來我們的愛從認真變得敷衍 後來我們的愛從誓言變成謊言」【動態歌詞/PinyinLyrics】♪", 272 | "link": "https://www.youtube.com/watch?v=G_NKYDSI574" 273 | }, 274 | { 275 | "title": "原子邦妮 Astro Bunny【深夜情歌 Late Night Tales】Official Music Video", 276 | "link": "https://www.youtube.com/watch?v=sGPHH8iLki8" 277 | }, 278 | { 279 | "title": "The Mongolian Live Sessions: Rokit Bay and DJ Zaya - Микрофоны ард ( remix )", 280 | "link": "https://www.youtube.com/watch?v=bfgr2agdWyI" 281 | }, 282 | { 283 | "title": "很美味 - April Encounter 「第一次見你的我(好慌張) 找不到什麼話要講」 抖音【動態歌詞】", 284 | "link": "https://www.youtube.com/watch?v=riNjqt1w5JQ" 285 | }, 286 | { 287 | "title": "BK x Vigoz -【第一次見妳的我】audio", 288 | "link": "https://www.youtube.com/watch?v=26Gq1LH7s54" 289 | }, 290 | { 291 | "title": "TANK [給我你的愛 Give me your love] Official Music Video", 292 | "link": "https://www.youtube.com/watch?v=9CInTGdSTf0" 293 | }, 294 | { 295 | "title": "李聖傑 Sam Lee【最近】Official Music Video", 296 | "link": "https://www.youtube.com/watch?v=azOIvILpIW8" 297 | }, 298 | { 299 | "title": "W0LF(S) 五堅情【你是我這輩子最想愛的呀 Last Love】Official MV | 邱鋒澤 Feng Ze、陳零九 NINE CHEN、黃偉晉 Wayne、賴晏駒 LAI、婁峻碩 SHOU", 300 | "link": "https://www.youtube.com/watch?v=3wPONiZwy0o" 301 | }, 302 | { 303 | "title": "雪 Distance (Capper feat. 罗言) Cover ( 蔡恩雨 Priscilla Abby)", 304 | "link": "https://www.youtube.com/watch?v=pgDj6apgMUA" 305 | }, 306 | { 307 | "title": "G.E.M.鄧紫棋【唯一 Only One】LIVE現場版 (時光音樂會 · 老友記 EP.4)", 308 | "link": "https://www.youtube.com/watch?v=xXr4Z7HAZCE" 309 | }, 310 | { 311 | "title": "飛兒樂團 F.I.R. - I remember (official 高畫質HD官方完整版MV)", 312 | "link": "https://www.youtube.com/watch?v=I0jziPqZLX8" 313 | }, 314 | { 315 | "title": "G.E.M.鄧紫棋【句號 Full Stop】LIVE現場版 (時光音樂會 · 老友記 EP.1)", 316 | "link": "https://www.youtube.com/watch?v=lRAu2VG25js" 317 | }, 318 | { 319 | "title": "灰色的雨", 320 | "link": "https://www.youtube.com/watch?v=Lc1DED7GVqw" 321 | }, 322 | { 323 | "title": "【按CC打開字幕】G.E.M.鄧紫棋 - 唯一(原唱:告五人)@2023煥新計劃《T.I.M.E.》EP 第二首", 324 | "link": "https://www.youtube.com/watch?v=Zv5vimlmasE" 325 | }, 326 | { 327 | "title": "想忘了所有", 328 | "link": "https://www.youtube.com/watch?v=j-Ye6DXiwO0" 329 | }, 330 | { 331 | "title": "太过神秘", 332 | "link": "https://www.youtube.com/watch?v=ZahX2Vfblg8" 333 | }, 334 | { 335 | "title": "Nicky/前男友 -《爱情是无法理解的现象》 【我要喝好多好多的酒,把爱都吐进这垃圾桶,这一杯全世界最烈的酒,敬那些相信着爱情的狗,我是选项E 是plan B。 】 动态音乐/lyric music", 336 | "link": "https://www.youtube.com/watch?v=QmMkvHyRjE4" 337 | }, 338 | { 339 | "title": "張敬軒 - 斷點", 340 | "link": "https://www.youtube.com/watch?v=eq1VWTE_iDI" 341 | }, 342 | { 343 | "title": "南西肯恩 NeciKen〈大海 Ocean〉Official Music Video", 344 | "link": "https://www.youtube.com/watch?v=exVEN7hlqBg" 345 | }, 346 | { 347 | "title": "康士坦的變化球 KST-美好的事可不可以發生在我身上 Lucky As You (Official Music Video)", 348 | "link": "https://www.youtube.com/watch?v=n7xF4UYrkq8" 349 | }, 350 | { 351 | "title": "南西肯恩 NeciKen〈我也曾經想過這樣殺了我自己 Once I Thought of Leaving〉Official Music Video", 352 | "link": "https://www.youtube.com/watch?v=aT6056Eb11I" 353 | }, 354 | { 355 | "title": "蕭秉治 Xiao Bing Chih [ 可不可以別做他的情人 Singing For You ] Official Music Video", 356 | "link": "https://www.youtube.com/watch?v=bFJbrfMEU_Y" 357 | }, 358 | { 359 | "title": "伍佰 Wu Bai&China Blue【痛哭的人 The person who weeps bitterly】Official Music Video", 360 | "link": "https://www.youtube.com/watch?v=P8fqHvr82-o" 361 | }, 362 | { 363 | "title": "蕭瀟-握不住的他", 364 | "link": "https://www.youtube.com/watch?v=gYIrKh388jo" 365 | }, 366 | { 367 | "title": "Doll", 368 | "link": "https://www.youtube.com/watch?v=nDtPSShUVYc" 369 | }, 370 | { 371 | "title": "My Stupid Heart - Walk off the Earth (Ft. Luminati Suns) Official Video", 372 | "link": "https://www.youtube.com/watch?v=1UJpFahphko" 373 | }, 374 | { 375 | "title": "九九 Sophie Chen -【再陪我一個夏天】 Another Summer 地獄里長 插曲 Official MV", 376 | "link": "https://www.youtube.com/watch?v=CzIVcGvnpgM" 377 | }, 378 | { 379 | "title": "林俊傑 - 握不住的他", 380 | "link": "https://www.youtube.com/watch?v=Ks9aqEOpPXU" 381 | }, 382 | { 383 | "title": "OneRepublic - If I Lose Myself", 384 | "link": "https://www.youtube.com/watch?v=TGx0rApSk6w" 385 | }, 386 | { 387 | "title": "Diana Wang 王詩安 - Somebody Else(Official Lyric Video)", 388 | "link": "https://www.youtube.com/watch?v=H5ATX5z7pvY" 389 | }, 390 | { 391 | "title": "南拳媽媽(Nan Quan Mama)-妳不像她 Ni Bu Xiang Ta (Official Music Video)", 392 | "link": "https://www.youtube.com/watch?v=3k8texyuDRo" 393 | }, 394 | { 395 | "title": "more than words", 396 | "link": "https://www.youtube.com/watch?v=Vm3tf65-8d4" 397 | }, 398 | { 399 | "title": "仗著 - 陳壹仟『妳就仗著 我對妳 那麽愛 那麽好,所以妳才 面對我 那麽驕傲』【動態歌詞】", 400 | "link": "https://www.youtube.com/watch?v=efAR_MlnQI4" 401 | }, 402 | { 403 | "title": "Juice Boy《Fake》Official Video", 404 | "link": "https://www.youtube.com/watch?v=9_5HzSOGEzE" 405 | }, 406 | { 407 | "title": "囧菌 - 東京不太熱「你已經淡出,在我時間軸。」[ High Quality Lyrics ] tk推薦", 408 | "link": "https://www.youtube.com/watch?v=eTFGL3rlOAs" 409 | }, 410 | { 411 | "title": "王忻辰, IN-K - 回憶觀影券『最後你消失在那個雨天 你說的再見在耳邊盤旋』【動態歌詞】", 412 | "link": "https://www.youtube.com/watch?v=ghh12yhxego" 413 | }, 414 | { 415 | "title": "Mariah Carey - Touch My Body (Official Music Video)", 416 | "link": "https://www.youtube.com/watch?v=9b8erWuBA44" 417 | }, 418 | { 419 | "title": "一首好聽的日語歌《be with you》Tiara【中日歌詞Lyrics】", 420 | "link": "https://www.youtube.com/watch?v=2IYluY6fS44" 421 | }, 422 | { 423 | "title": "LONGMAN 『spiral』Music Video(TVアニメ『無職転生Ⅱ ~異世界行ったら本気だす~』OPテーマ)", 424 | "link": "https://www.youtube.com/watch?v=fE9trKOuT3Q" 425 | }, 426 | { 427 | "title": "Martin Garrix & David Guetta - So Far Away (Official Video) feat. Jamie Scott & Romy Dya", 428 | "link": "https://www.youtube.com/watch?v=o7iL2KzDh38" 429 | }, 430 | { 431 | "title": "【MOMOLAND X CHROMANCE】 Wrap Me In Plastic (中字MV)", 432 | "link": "https://www.youtube.com/watch?v=8vN96QpSfWs" 433 | }, 434 | { 435 | "title": "崎山蒼志 Soushi Sakiyama / 燈 Akari [Official Music Video]", 436 | "link": "https://www.youtube.com/watch?v=4jWzGkRsHw8" 437 | }, 438 | { 439 | "title": "【中日翻譯/歌詞】無職轉生 第二季 OP「Longman - Spiral」(無職転生 Season 2 Full Opening OP)【JP/Eng/中/Romaji Lyrics 歌詞】", 440 | "link": "https://www.youtube.com/watch?v=t6KMFNHTsaU" 441 | }, 442 | { 443 | "title": "DP 龍豬/王雲宏/陷阱表哥 - 翠花「沒收到你的消息我會傷心聽了村長說你要相親 」【動態歌詞/PinyinLyrics】♪", 444 | "link": "https://www.youtube.com/watch?v=fbFucBKdiwA" 445 | }, 446 | { 447 | "title": "張遠 - 嘉賓【高音質|動態歌詞Lyrics】♫『感謝你特別邀請,來見證你的愛情。』Zhang Yuan-Khách", 448 | "link": "https://www.youtube.com/watch?v=jPzkNvWOcGc" 449 | }, 450 | { 451 | "title": "信徒 - 張衛健『如果我們不曾看過對方這麼苦』【動態歌詞Lyrics】", 452 | "link": "https://www.youtube.com/watch?v=B0LfRStmDOM" 453 | }, 454 | { 455 | "title": "\"Where Did U Go\" [MV] - G.E.M. 鄧紫棋", 456 | "link": "https://www.youtube.com/watch?v=9k_qrnQpwR8" 457 | }, 458 | { 459 | "title": "J.YosH - 《籠中鳥》(Official Audio)", 460 | "link": "https://www.youtube.com/watch?v=ApGpxNxZizQ" 461 | }, 462 | { 463 | "title": "林俊傑 JJ Lin《交換餘生 No Turning Back》Official Music Video", 464 | "link": "https://www.youtube.com/watch?v=mNQwhIx_0CM" 465 | }, 466 | { 467 | "title": "【纯享】妙莎Miusa 王雨霃《交换余生》宿命感拉满 平行时空的爱恋纠葛让人动容 |《青年π计划》第7期 | Youth π Plan Stage Pure Version | Mango TV", 468 | "link": "https://www.youtube.com/watch?v=sWOpVJnotrA" 469 | }, 470 | { 471 | "title": "告五人 Accusefive【帶我去找夜生活 Night life.Take us to the light】Official Music Video", 472 | "link": "https://www.youtube.com/watch?v=W9Fq1HC_5hg" 473 | }, 474 | { 475 | "title": "Karencici – Everybody Loves Me ft.高爾宣 OSN (Visualizer)", 476 | "link": "https://www.youtube.com/watch?v=Lqbm13zHMsg" 477 | }, 478 | { 479 | "title": "Kelly Yu 于文文《Want You Back》Official Music Video", 480 | "link": "https://www.youtube.com/watch?v=vJT9oIIcVZ0" 481 | }, 482 | { 483 | "title": "【纯享版】没有人能拒绝玩摇滚的于文文!合作小鬼王琳凯一曲《带我去找夜生活》瞬间燃炸舞台! #天赐的声音4 EP1 20230428", 484 | "link": "https://www.youtube.com/watch?v=xzvdupWRTFY" 485 | }, 486 | { 487 | "title": "MIUSA - “忘了眼淚” M/V", 488 | "link": "https://www.youtube.com/watch?v=zp_vEg50suQ" 489 | }, 490 | { 491 | "title": "【纯享】妙莎《就让这大雨全都落下》听哭了!一袭白裙水中起舞太绝了! |《青年π计划》第5期 | Youth π Plan Stage Pure Version | Mango TV", 492 | "link": "https://www.youtube.com/watch?v=lXnwo9iqARM" 493 | }, 494 | { 495 | "title": "FAST X | G Herbo, 24kGoldn, Kane Brown - My City (Official Audio)", 496 | "link": "https://www.youtube.com/watch?v=yV-dU5_9HcQ" 497 | }, 498 | { 499 | "title": "FAST X | YG, Ty Dolla $ign, Lambo4oe - Let's Ride (Official Audio)", 500 | "link": "https://www.youtube.com/watch?v=UYopFD8kQUI" 501 | }, 502 | { 503 | "title": "纯享丨宝石Gem一首《年轻的窦唯》再证实力 全新舞台太震撼引全场尖叫 | 中国说唱巅峰对决 EP1 花絮CLIP | iQIYI精选", 504 | "link": "https://www.youtube.com/watch?v=Ogm_NnTNCkM" 505 | }, 506 | { 507 | "title": "寶石Gem《野狼Disco》官方高畫質 Official HD MV | Disco Alaskan Wolves", 508 | "link": "https://www.youtube.com/watch?v=TWm31xbRVjI" 509 | }, 510 | { 511 | "title": "阿跨面 - 陷眠|純享版|EP12 SEMI FINALS 名列前茅", 512 | "link": "https://www.youtube.com/watch?v=kKBUgVHhWrA" 513 | }, 514 | { 515 | "title": "ずっと真夜中でいいのに。『不法侵入』MV (ZUTOMAYO – Intrusion)", 516 | "link": "https://www.youtube.com/watch?v=SAdkxVFyAyc" 517 | }, 518 | { 519 | "title": "晚风告白 (加速版)", 520 | "link": "https://www.youtube.com/watch?v=dEc1qyI0EA0" 521 | }, 522 | { 523 | "title": "星野 - 晚風告白『我遇見很多人卻只想和你慢慢周旋,完全對的感覺在 心動蔓延。』【高音質|動態歌詞Lyrics】♫", 524 | "link": "https://www.youtube.com/watch?v=VIRQg8d8HvM" 525 | }, 526 | { 527 | "title": "Wild Tik Tok - Monogem | 抖音神曲", 528 | "link": "https://www.youtube.com/watch?v=xLK57q6ylJI" 529 | }, 530 | { 531 | "title": "Follow(羅生門)- 梨凍緊 / Wiz_H張子豪『我們看慣了世間的羅生門,變得好像陌生人』【動態歌詞】", 532 | "link": "https://www.youtube.com/watch?v=2utdIHMmC3Y" 533 | }, 534 | { 535 | "title": "张子豪 Wiz_H - 一般的一天 『一般的一天一般的一晚,一般的失眠到一栋楼的灯只下剩一盏。』【动态歌词/Pinyin Lyrics】[说唱听我的2]", 536 | "link": "https://www.youtube.com/watch?v=tIPP18Q0r08" 537 | }, 538 | { 539 | "title": "纯享:Wiz_H张子豪《说唱入门教学2.0》专业教学现场 | #中国说唱巅峰对决2023 EP3 THE RAP OF CHINA| iQIYI精选", 540 | "link": "https://www.youtube.com/watch?v=PP5SezdIsbs" 541 | }, 542 | { 543 | "title": "開口跪!女聲一出,瞬間感覺心靈都治癒了! ——《花降らし》 pazi", 544 | "link": "https://www.youtube.com/watch?v=5veZ_PcaFYM" 545 | }, 546 | { 547 | "title": "【纯享版】当京剧唱腔遇上热血Rap!GAI周延&刘柏辛《三国恋》完美演绎跨越时空的音乐魅力! #天赐的声音4 EP4", 548 | "link": "https://www.youtube.com/watch?v=Y1gEUPuy7cI" 549 | }, 550 | { 551 | "title": "I Wanna Be (Original Mix) - Erok (Kain Release) ♪ || 抖音 ·|· TikTok", 552 | "link": "https://www.youtube.com/watch?v=n2pfECO4YL4" 553 | }, 554 | { 555 | "title": "I Wanna Be - eRok [w/ lyrics]", 556 | "link": "https://www.youtube.com/watch?v=I5InCfs6W_U" 557 | }, 558 | { 559 | "title": "异地恋 ‖ ZAVIS/坤木Joymo 『我每天问一百次如何才能逃出生天』【动态歌词版Lyrics】", 560 | "link": "https://www.youtube.com/watch?v=IbjM-AXSfVw" 561 | }, 562 | { 563 | "title": "[MV] 陳華 HuaChen【想和你看五月的晚霞 Sunset In May】feat. LCY呂植宇 | Official Music Video", 564 | "link": "https://www.youtube.com/watch?v=ljd9ISixsWo" 565 | }, 566 | { 567 | "title": "《我會等》Cover By 魚閃閃BLING ||『我會等枯樹生出芽開出新的花 等著陽光刺破黑暗第一縷朝霞』#我會等 #承桓 #魚閃閃路演 #魚閃閃 #魚閃閃bling", 568 | "link": "https://www.youtube.com/watch?v=nmM-hLgJt7s" 569 | }, 570 | { 571 | "title": "周杰倫 Jay Chou【黑色毛衣 Black Sweater】-Official Music Video", 572 | "link": "https://www.youtube.com/watch?v=bX33UI9ZPLk" 573 | }, 574 | { 575 | "title": "高爾宣OSN ft.李浩瑋 Howard Lee-Drowning (Official Music Video)", 576 | "link": "https://www.youtube.com/watch?v=v32e9oWC29s" 577 | }, 578 | { 579 | "title": "莫文蔚 Karen Mok【忽然之間 Suddenly】Official Music Video", 580 | "link": "https://www.youtube.com/watch?v=h1tNw1aFzSM" 581 | }, 582 | { 583 | "title": "TVアニメ『Dr.STONE NEW WORLD』第1クールED<Where Do We Go?>ノンクレジット映像", 584 | "link": "https://www.youtube.com/watch?v=9B7TpqDgyE4" 585 | }, 586 | { 587 | "title": "【Lara梁心頤】Where Do We Go (中文版) 官方Official Music Video", 588 | "link": "https://www.youtube.com/watch?v=2mh29oiBZTg" 589 | }, 590 | { 591 | "title": "莎夏斯隆 Sasha Sloan / 與你的靈魂共舞 Dancing With Your Ghost (中字MV)", 592 | "link": "https://www.youtube.com/watch?v=79RLkH3T8hg" 593 | }, 594 | { 595 | "title": "Belinda - Colorblind (Audio)", 596 | "link": "https://www.youtube.com/watch?v=Fl6KWh6DWYo" 597 | }, 598 | { 599 | "title": "Mokita - colorblind (Lyrics)", 600 | "link": "https://www.youtube.com/watch?v=KWIpD1ZMqOg" 601 | }, 602 | { 603 | "title": "Canyon City - \"Catch Fire\" (Lyric Video)", 604 | "link": "https://www.youtube.com/watch?v=Eq3aPKp9wFs" 605 | }, 606 | { 607 | "title": "Gummy B - LOVE MYSELF", 608 | "link": "https://www.youtube.com/watch?v=C2hO8qV5c2c" 609 | }, 610 | { 611 | "title": "【中英字幕】Ina-I wanted you 是你就好", 612 | "link": "https://www.youtube.com/watch?v=Vwl4orXWnTs" 613 | }, 614 | { 615 | "title": "Paula DeAnda - Why Would I Ever [ lyric ]", 616 | "link": "https://www.youtube.com/watch?v=38JY19yV4Ro" 617 | }, 618 | { 619 | "title": "MK - 我好喜歡妳但妳卻不知道 (prod. cobwxb)", 620 | "link": "https://www.youtube.com/watch?v=fOEnccaZuIM" 621 | }, 622 | { 623 | "title": "艾蜜莉AMILI, 史蒂芬 SteeVen - 夢一場|純享版|EP7 BLOCK TO BLOCK 區域對決 (下)", 624 | "link": "https://www.youtube.com/watch?v=q8zlPvWQBoo" 625 | }, 626 | { 627 | "title": "Talking To The Moon X PlayDate (Bruno Mars)", 628 | "link": "https://www.youtube.com/watch?v=WXIBwIcBR2Y" 629 | }, 630 | { 631 | "title": "GAYLE - abcdefu (Official Music Video)", 632 | "link": "https://www.youtube.com/watch?v=NaFd8ucHLuo" 633 | }, 634 | { 635 | "title": "Lukas Graham - 7 Years [Official Music Video]", 636 | "link": "https://www.youtube.com/watch?v=LHCob76kigA" 637 | }, 638 | { 639 | "title": "Just So You Know", 640 | "link": "https://www.youtube.com/watch?v=R36xGZMoz5Q" 641 | }, 642 | { 643 | "title": "The Script - Hall of Fame (Official Video) ft. will.i.am", 644 | "link": "https://www.youtube.com/watch?v=mk48xRzuNvA" 645 | }, 646 | { 647 | "title": "劉大拿/Aioz - 罵醒我·2022(原唱:周湯豪)『Babe能不能抓住我,當我的心被搞亂了,當我又笨得要逃走。』【動態歌詞/Vietsub/Pinyin Lyrics】", 648 | "link": "https://www.youtube.com/watch?v=mp7p-48qp_4" 649 | }, 650 | { 651 | "title": "Marz23 x ØZI【情勒 GASLIGHT】(Official Video)", 652 | "link": "https://www.youtube.com/watch?v=9K7igKasYL4" 653 | }, 654 | { 655 | "title": "こはならむ 「リセットボタン」 Official Music Video", 656 | "link": "https://www.youtube.com/watch?v=EXI_uJwST8o" 657 | }, 658 | { 659 | "title": "MK - 又再一次...妳讓我輸得徹底 (prod. cløud x jkei)", 660 | "link": "https://www.youtube.com/watch?v=o9AvdPfRdFE" 661 | }, 662 | { 663 | "title": "柯有綸 Alan Kuo - 零", 664 | "link": "https://www.youtube.com/watch?v=kgDL9p0w2-k" 665 | }, 666 | { 667 | "title": "范逸臣 Van Fan《Love Story》官方MV (Official Music Video)", 668 | "link": "https://www.youtube.com/watch?v=n1hkM-tCWJM" 669 | }, 670 | { 671 | "title": "派偉俊 Patrick Brasca【Don't Wanna Lie】(ft. 8lak, Hosea) Official MV", 672 | "link": "https://www.youtube.com/watch?v=P9NVjak9vH4" 673 | }, 674 | { 675 | "title": "Turn into Fireworks and Fall for You", 676 | "link": "https://www.youtube.com/watch?v=iD3b3tFbmHw" 677 | }, 678 | { 679 | "title": "TRASH《終究還是因為愛 LOVE》Live in LA (Official Music Video)", 680 | "link": "https://www.youtube.com/watch?v=zPupYkCIMBU" 681 | }, 682 | { 683 | "title": "Bu$Y & Ye!!ow , Paper Jim - 【戀曲2020 LOVE SONG 2020】Chapter 1 (Official Music Video)", 684 | "link": "https://www.youtube.com/watch?v=2oZr3uv_ddc" 685 | }, 686 | { 687 | "title": "Bu$Y & Ye!!ow , Paper Jim - 【沒注意到你在流眼淚】Starring:鄭人碩、莫允雯(Official Music Video)", 688 | "link": "https://www.youtube.com/watch?v=asENVVLjAeo" 689 | }, 690 | { 691 | "title": "TRASH 《離開台北 LEAVING TAIPEI》 Official Music Video", 692 | "link": "https://www.youtube.com/watch?v=T_AFMCpQgkI" 693 | }, 694 | { 695 | "title": "Marz23 -【那種人 That Kind of Person】Live At Legacy 專輯演唱會", 696 | "link": "https://www.youtube.com/watch?v=H_e2LYU1a3w" 697 | }, 698 | { 699 | "title": "Whales & ggnoaa - Paranoia [NCS Release]", 700 | "link": "https://www.youtube.com/watch?v=y_oYnDqYPtw" 701 | }, 702 | { 703 | "title": "はなびら / 奥華子 full covered by 春茶", 704 | "link": "https://www.youtube.com/watch?v=QGcfH2Y2bSQ" 705 | }, 706 | { 707 | "title": "【TRUE】「rebind」Music Video(TVアニメ『もののがたり』EDテーマ)", 708 | "link": "https://www.youtube.com/watch?v=4h7up5zbkac" 709 | }, 710 | { 711 | "title": "有些 - 有声有社『我就算不舍也要趁早去果断 ,我们都留在美丽的经年 。』【動態歌詞Lyrics】", 712 | "link": "https://www.youtube.com/watch?v=GgbFhfrE5dY" 713 | }, 714 | { 715 | "title": "【動態歌詞 Lyrics】喵了個咪─無人可偷 |冷門歌曲分享♪♪♪", 716 | "link": "https://www.youtube.com/watch?v=JWUZg1z-R-M" 717 | }, 718 | { 719 | "title": "不舍-任然", 720 | "link": "https://www.youtube.com/watch?v=P5AoS6YSaco" 721 | }, 722 | { 723 | "title": "莫宰羊 - 孤星淚 ft. Karencici * M/V", 724 | "link": "https://www.youtube.com/watch?v=111PWwyHZnI" 725 | }, 726 | { 727 | "title": "有声有社 - 不多", 728 | "link": "https://www.youtube.com/watch?v=DiEanGsdp7Q" 729 | }, 730 | { 731 | "title": "小賤 Dry (歌詞版)", 732 | "link": "https://www.youtube.com/watch?v=nH1vuPZEHwY" 733 | }, 734 | { 735 | "title": "苗田雨 - 會不會想我【高音質|動態歌詞Lyrics】♫『你會怎樣想我 還是當作沒發生過,只是求你別吵醒了我。』", 736 | "link": "https://www.youtube.com/watch?v=oor4cwwTdaw" 737 | }, 738 | { 739 | "title": "JiaJia家家【填空】-三立九點華劇「真愛趁現在」插曲", 740 | "link": "https://www.youtube.com/watch?v=9Y15es8OY0U" 741 | }, 742 | { 743 | "title": "Marz23 ft.W.LIN -【Everything】Official Music Video", 744 | "link": "https://www.youtube.com/watch?v=u9tO9eyU6n0" 745 | }, 746 | { 747 | "title": "Marz23 -【I HATE YOU】Official Music Video", 748 | "link": "https://www.youtube.com/watch?v=E_Wl23yvQjQ" 749 | }, 750 | { 751 | "title": "王冕 - 勉為其難『如果不愛了就別勉為其難。』【動態歌詞Lyrics】", 752 | "link": "https://www.youtube.com/watch?v=WbpUBiUdnXM" 753 | }, 754 | { 755 | "title": "FUCK IT", 756 | "link": "https://www.youtube.com/watch?v=6w8dIKv8pNs" 757 | }, 758 | { 759 | "title": "吳霏 FEI -【起點 OUTSET】(feat. @ivylee1912 ) Official Music Video", 760 | "link": "https://www.youtube.com/watch?v=EsPZ0Ullb4c" 761 | }, 762 | { 763 | "title": "Eric周興哲 × 單依純《愛我的時候 When You Loved Me》Official Music Video", 764 | "link": "https://www.youtube.com/watch?v=bG563p_moiE" 765 | }, 766 | { 767 | "title": "Melo-D - Just Say Hello(《請先說你好》英文版)【動態歌詞/Vietsub Lyrics】", 768 | "link": "https://www.youtube.com/watch?v=O8rjNfYXq3I" 769 | }, 770 | { 771 | "title": "Jesse McCartney - Just So You Know (Lyrics)", 772 | "link": "https://www.youtube.com/watch?v=NCBuE-_kB-k" 773 | }, 774 | { 775 | "title": "Taylor Swift - Love Story", 776 | "link": "https://www.youtube.com/watch?v=8xg3vE8Ie_E" 777 | }, 778 | { 779 | "title": "Marz23 & W.LIN \"Everything\" LIVE IN TAIPEI 2020 (Official Video)", 780 | "link": "https://www.youtube.com/watch?v=BHm6P3uTvTY" 781 | }, 782 | { 783 | "title": "FY_Aoneone奉悅 - 低調女孩 (official audio)", 784 | "link": "https://www.youtube.com/watch?v=5DlMBmAzeQc" 785 | }, 786 | { 787 | "title": "任舒瞳 - 對號入座「明知道你的簽名寫的不是為了我,而我卻自欺欺人的對號入座」【動態歌詞/pīn yīn gē cí】", 788 | "link": "https://www.youtube.com/watch?v=cIaRhKrWbnk" 789 | }, 790 | { 791 | "title": "[Lyrics] Rosa Walton & Hallie Coggins - I Really Want to Stay at Your House (Cover by 任舒瞳) - DouYin", 792 | "link": "https://www.youtube.com/watch?v=6gvED2vDN4U" 793 | }, 794 | { 795 | "title": "ROSA WALTON & HALLIE COGGINS - I REALLY WANT TO STAY AT YOUR HOUSE (LYRIC) AMV CYBERPUNK EDGERUNNERS", 796 | "link": "https://www.youtube.com/watch?v=q74fX9CnqtQ" 797 | }, 798 | { 799 | "title": "蔡健雅 - Letting Go『I'm letting go 我终于舍得为你放开手,因为爱你爱到我心痛。』【動態歌詞】♪", 800 | "link": "https://www.youtube.com/watch?v=In0cTkWF9WA" 801 | }, 802 | { 803 | "title": "蔡健雅 Tanya Chua - Letting Go 官方MV完整放映", 804 | "link": "https://www.youtube.com/watch?v=116OjLa1DwY" 805 | }, 806 | { 807 | "title": "TRASH《希望你回來 I Don’t Wanna Say Goodbye》Live Session #4", 808 | "link": "https://www.youtube.com/watch?v=1ONloySyBwA" 809 | }, 810 | { 811 | "title": "TRASH -《綻放》(Official Music Video)", 812 | "link": "https://www.youtube.com/watch?v=ywAEgYPAI1U" 813 | }, 814 | { 815 | "title": "Breathe《喘息》- Lauv中文字幕∥ MattRouseMusic Cover", 816 | "link": "https://www.youtube.com/watch?v=qFDB57T_5BM" 817 | }, 818 | { 819 | "title": "Rosie楊凱琳&余楓《怎麼還不愛 Why Not Love》Official Music Video", 820 | "link": "https://www.youtube.com/watch?v=3q6D0wMX_H0" 821 | }, 822 | { 823 | "title": "高爾宣 OSN -【Why You Gonna Lie】|Official MV", 824 | "link": "https://www.youtube.com/watch?v=nEpF6ISYdM0" 825 | }, 826 | { 827 | "title": "space x - 身後【動態歌詞】「在人潮擁擠的以後 你是否還能在我身後」♪", 828 | "link": "https://www.youtube.com/watch?v=to7w5XvTRVE" 829 | }, 830 | { 831 | "title": "隨性 Random 《想你點煙》Official Music Video", 832 | "link": "https://www.youtube.com/watch?v=m60hjpNtq5k" 833 | }, 834 | { 835 | "title": "告五人 Accusefive [ 唯一 The One And Only ] Official Music Video (三立/台視戲劇【戀愛是科學】插曲)", 836 | "link": "https://www.youtube.com/watch?v=vxucCfcMFCk" 837 | }, 838 | { 839 | "title": "阿密特/張惠妹 - 血腥愛情故事(歌詞版)", 840 | "link": "https://www.youtube.com/watch?v=-YtsnlPvPt8" 841 | }, 842 | { 843 | "title": "Cash Cash - Hero feat. Christina Perri [Official Audio]", 844 | "link": "https://www.youtube.com/watch?v=iafxqkKZacA" 845 | }, 846 | { 847 | "title": "(輕電音)Lost Kings - Quit You 拒絕你", 848 | "link": "https://www.youtube.com/watch?v=_3Pez_j2w88" 849 | }, 850 | { 851 | "title": "電影神話主題曲-無盡的愛(金喜善&成龍)", 852 | "link": "https://www.youtube.com/watch?v=BxmtNCoQNNI" 853 | }, 854 | { 855 | "title": "【女性が歌う】灰色と青+菅田将暉/米津玄師(Covered by コバソロ & 春茶)", 856 | "link": "https://www.youtube.com/watch?v=9nCkUgTO5x4" 857 | }, 858 | { 859 | "title": "ウォルピスカーター MV 『泥中に咲く』", 860 | "link": "https://www.youtube.com/watch?v=40dJS_LC6S8" 861 | }, 862 | { 863 | "title": "一首好聽的日語歌——《カルデラ》黒木渚", 864 | "link": "https://www.youtube.com/watch?v=cXeo2yn22z0" 865 | }, 866 | { 867 | "title": "Jay Park X 1MILLION / 'All I Wanna Do (K) (feat. Hoody & Loco)' [Choreography Version]", 868 | "link": "https://www.youtube.com/watch?v=lT7Q93fy1us" 869 | }, 870 | { 871 | "title": "李杰明 W.M.L -【炙愛 feat. 陳忻玥 Vicky Chen】Fiery Love | Official MV", 872 | "link": "https://www.youtube.com/watch?v=1rBm0uSp73w" 873 | }, 874 | { 875 | "title": "周杰倫 Jay Chou【說好不哭 Won't Cry (with 五月天阿信 Mayday Ashin)】Official MV", 876 | "link": "https://www.youtube.com/watch?v=HK7SPnGSxLM" 877 | }, 878 | { 879 | "title": "李杰明 W.M.L x 陳忻玥 Vicky Chen【I'm Alive】Official MV", 880 | "link": "https://www.youtube.com/watch?v=dtVR0oi_N4U" 881 | }, 882 | { 883 | "title": "Fiction", 884 | "link": "https://www.youtube.com/watch?v=Nqcj292A1ic" 885 | }, 886 | { 887 | "title": "王傑 - 我忘了怎麼哭『我忘了怎麼哭 卻痛到深處』【動態歌詞Lyrics】", 888 | "link": "https://www.youtube.com/watch?v=dO1ZivuptZE" 889 | }, 890 | { 891 | "title": "摩登兄弟劉宇寧 - 尋一個你 【電視劇《蒼蘭訣 Love Between Fairy and Devil》溫情主題曲】「縱天下負盡 不負你」♪【動態歌詞】♪", 892 | "link": "https://www.youtube.com/watch?v=bUZaZrce7Sg" 893 | }, 894 | { 895 | "title": "【梭哈樂團ShowHand】《想回家》Official Lyrics Video", 896 | "link": "https://www.youtube.com/watch?v=JzRWcC34omY" 897 | }, 898 | { 899 | "title": "Fifth Harmony - Worth It (Official Video) ft. Kid Ink", 900 | "link": "https://www.youtube.com/watch?v=YBHQbu5rbdQ" 901 | }, 902 | { 903 | "title": "對不起,現在的我真的好想,逃離這一切...【中文翻譯】", 904 | "link": "https://www.youtube.com/watch?v=xhLYAQZbwbc" 905 | }, 906 | { 907 | "title": "陳卓 Jon Chen 【愚人節 All Fool's Day】Official Music Video", 908 | "link": "https://www.youtube.com/watch?v=sKjaWbfx2No" 909 | }, 910 | { 911 | "title": "張小伙, 粥粥zxr - 時間畫的線♪『某一種熟悉的味道被收藏』【動態歌詞Lyrics】", 912 | "link": "https://www.youtube.com/watch?v=wQWn-dTIfm0" 913 | }, 914 | { 915 | "title": "VH (Vast & Hazy) 【與浪之間 Waves】 Official Music Video", 916 | "link": "https://www.youtube.com/watch?v=10DHUqSVu6I" 917 | }, 918 | { 919 | "title": "GTO - ending 1 full ( _Last Piece_ ) by Kirari", 920 | "link": "https://www.youtube.com/watch?v=xIoV3hdRucY" 921 | }, 922 | { 923 | "title": "回憶鬼冢老師的歌曲!【麻辣教師 GTO 片尾曲 - Last Piece】中日羅馬拼音 歌詞", 924 | "link": "https://www.youtube.com/watch?v=wRPmjIxYc74" 925 | }, 926 | { 927 | "title": "See Tình (Cucak Remix DJ抖音版) - Hoàng Thùy Linh『叮叮当当 Tình tình tình tang tang tính。』【動態歌詞】♪", 928 | "link": "https://www.youtube.com/watch?v=E1PIqgTltVA" 929 | }, 930 | { 931 | "title": "IN-K & 王忻辰 - 迷失幻境 (DJ版)「没来得及说抱歉,你已经不在身边」【動態歌詞/pīn yīn gē cí】", 932 | "link": "https://www.youtube.com/watch?v=TkaGkTb_Twg" 933 | }, 934 | { 935 | "title": "直球 (โต๊ะริม (Melt)心動版) - yihuik苡慧『喜歡攢了好久 打出這一記直球,心動打敗害羞 想大聲 對妳說 ,陪我吹風的妳 比風溫柔』【動態歌詞】", 936 | "link": "https://www.youtube.com/watch?v=bVJoMiXOiFk" 937 | }, 938 | { 939 | "title": "Yiruma - River Flows in You - Violin Cover", 940 | "link": "https://www.youtube.com/watch?v=KjJ_zKUt0KE" 941 | }, 942 | { 943 | "title": "【歌词】张芸京 - 偏爱 《仙剑奇侠传三》插曲/原唱", 944 | "link": "https://www.youtube.com/watch?v=qlZ1s-NQthQ" 945 | }, 946 | { 947 | "title": "彭席彥/Franky弗蘭奇 - 再見莫妮卡『月光溫柔纏綿 迷霧模糊你的臉,教唆蜜語甜言。』【動態歌詞Lyrics】", 948 | "link": "https://www.youtube.com/watch?v=zFZALG0Y5L0" 949 | }, 950 | { 951 | "title": "Theseus 忒修斯 【半衰期】Feat. 許時 Official Music Video", 952 | "link": "https://www.youtube.com/watch?v=-6xZeVqpTXs" 953 | }, 954 | { 955 | "title": "Control T 〈來自我自己〉Demo", 956 | "link": "https://www.youtube.com/watch?v=Fgc6ZIe88F0" 957 | }, 958 | { 959 | "title": "Diana Wang 王詩安 - Make You Feel (Official Music Video)", 960 | "link": "https://www.youtube.com/watch?v=JxDVQI9885Q" 961 | }, 962 | { 963 | "title": "Diana Wang (王詩安) - Poem (一步成詩) Official Music Video", 964 | "link": "https://www.youtube.com/watch?v=iE-buimT8KQ" 965 | }, 966 | { 967 | "title": "Diana Wang (王詩安) - HOME (Official Music Video)", 968 | "link": "https://www.youtube.com/watch?v=mrEee4bhc7Y" 969 | }, 970 | { 971 | "title": "【Ado】風のゆくえ(ウタ from ONE PIECE FILM RED)", 972 | "link": "https://www.youtube.com/watch?v=YO-rXgQKlF8" 973 | }, 974 | { 975 | "title": "Faye詹雯婷 - 訣愛【電視劇《蒼蘭訣 Love Between Fairy and Devil》燃愛主題曲】「無處安放靈魂 只能降落」♪【動態歌詞】♪", 976 | "link": "https://www.youtube.com/watch?v=I4lonGT1PYM" 977 | }, 978 | { 979 | "title": "Boku no Ita Jikan Instrumental OST/BGM - やわらかな光 (Humming)", 980 | "link": "https://www.youtube.com/watch?v=C8yG9D8lz6g" 981 | }, 982 | { 983 | "title": "蕭亞軒 Elva Hsiao - 類似愛情 Similar to Love (官方完整版MV)", 984 | "link": "https://www.youtube.com/watch?v=nlejjTDgHBg" 985 | }, 986 | { 987 | "title": "蕭亞軒 Elva Hsiao - 最熟悉的陌生人 The Most Familiar Stranger (官方完整版MV)", 988 | "link": "https://www.youtube.com/watch?v=C5mI0TqrJ-4" 989 | }, 990 | { 991 | "title": "蕭亞軒 Elva Hsiao - U Make Me Wanna feat. Blue ( 官方完整版MV)", 992 | "link": "https://www.youtube.com/watch?v=hNqFD-cGkeo" 993 | }, 994 | { 995 | "title": "周杰倫 Jay Chou【我是如此相信 I Truly Believe】(電影天火主題曲) Official MV", 996 | "link": "https://www.youtube.com/watch?v=TbFWYT9VGRk" 997 | }, 998 | { 999 | "title": "倒影", 1000 | "link": "https://www.youtube.com/watch?v=XvHc_VEop7I" 1001 | }, 1002 | { 1003 | "title": "粉色海洋", 1004 | "link": "https://www.youtube.com/watch?v=vEZCoe9GJFk" 1005 | }, 1006 | { 1007 | "title": "錯過的煙火", 1008 | "link": "https://www.youtube.com/watch?v=wwUN9NWXcnY" 1009 | }, 1010 | { 1011 | "title": "周杰倫-紅顏如霜 Lyrics 歌詞", 1012 | "link": "https://www.youtube.com/watch?v=zOC14ZNUyNY" 1013 | }, 1014 | { 1015 | "title": "蕭秉治 Xiao Bing Chih [ 愛過你有多久就有多痛 Love Hurts ] Official Music Video", 1016 | "link": "https://www.youtube.com/watch?v=AoquFYC8-mk" 1017 | }, 1018 | { 1019 | "title": "蕭秉治Xiao Bing Chih [ 毒藥 Addiction ] Official Music Video", 1020 | "link": "https://www.youtube.com/watch?v=rgTQYCo0WCM" 1021 | }, 1022 | { 1023 | "title": "카더가든(Car the garden) - 상처는 아름다운 흔적이 되어 (환혼 OST) Alchemy of Souls OST Part 1", 1024 | "link": "https://www.youtube.com/watch?v=eiXE9zpZgQA" 1025 | }, 1026 | { 1027 | "title": "周杰倫 Jay Chou【七里香 Qi-Li-Xiang】-Official Music Video", 1028 | "link": "https://www.youtube.com/watch?v=Bbp9ZaJD_eA" 1029 | }, 1030 | { 1031 | "title": "心跳的證明 - 不是花火呀『你是我唯一想要的決定,每一次 再一次 你慢慢的靠近』【動態歌詞】", 1032 | "link": "https://www.youtube.com/watch?v=pzmKq-jdEAM" 1033 | }, 1034 | { 1035 | "title": "小包Zerinn - 愛你「Ho Baby情話多說一點 想我就多看一眼」【動態歌詞/PinyinLyrics】♪", 1036 | "link": "https://www.youtube.com/watch?v=beY4NGKw6GA" 1037 | }, 1038 | { 1039 | "title": "TANK [三國戀 Three Kingdom Love] Official Music Video", 1040 | "link": "https://www.youtube.com/watch?v=GggTls8KznY" 1041 | }, 1042 | { 1043 | "title": "艾辰 - 三國戀(原唱:Tank)『在我離你遠去那一天,灰色的夢睡在我身邊,我早就該習慣沒有你的夜。』【動態歌詞/Vietsub/Pinyin Lyrics】", 1044 | "link": "https://www.youtube.com/watch?v=a07Xn012Kok" 1045 | }, 1046 | { 1047 | "title": "一首好聽的日文歌--ただ声一つ(ロクデナシ)【中日字幕】", 1048 | "link": "https://www.youtube.com/watch?v=qmR8b6iCwjw" 1049 | }, 1050 | { 1051 | "title": "Pink Sweat$ - At My Worst (Official Video)", 1052 | "link": "https://www.youtube.com/watch?v=8CEJoCr_9UI" 1053 | }, 1054 | { 1055 | "title": "葛東琪 - 懸溺 | 抖音熱曲 | 高音質動態歌詞Lyrics", 1056 | "link": "https://www.youtube.com/watch?v=Bal2dSVM1N8" 1057 | }, 1058 | { 1059 | "title": "Uu - 氣象站台『當天空突然斷了層刮起了風,卻突然想起為你撐過傘的人。』【動態歌詞Lyrics】", 1060 | "link": "https://www.youtube.com/watch?v=QyOTbSe1fjY" 1061 | }, 1062 | { 1063 | "title": "|🔥抖音最火🔥 | 錦零 - 戀愛畫板 『愛情有紫色紅色藍色白色四種顏色 』【lyrics video】| Bảng Vẽ Tình Yêu - Cẩm Linh", 1064 | "link": "https://www.youtube.com/watch?v=8nrLA9CkOG0" 1065 | }, 1066 | { 1067 | "title": "姚六一 - 霧裡【動態歌詞】「彩色的世界我在我的霧裡多麽清晰 他們黑白的心」♪", 1068 | "link": "https://www.youtube.com/watch?v=TbOhwtHtmF0" 1069 | }, 1070 | { 1071 | "title": "小藍背心 - 我怕來者不是你(DJ版)『怕無歸期 怕會猶豫,怕來的不是你 怕沒有結局。』【動態歌詞/Vietsub/Pinyin Lyrics】", 1072 | "link": "https://www.youtube.com/watch?v=QMfG2IV9S4Y" 1073 | }, 1074 | { 1075 | "title": "黃霄雲 - 星辰大海「穿過人海 別停下來 趁現在還有期待」【動態歌詞Lyrics】", 1076 | "link": "https://www.youtube.com/watch?v=6tk9jlKo8y4" 1077 | }, 1078 | { 1079 | "title": "王以諾 - 致00後的預防針「如果你是零零後 大概也成熟了吧」【動態歌詞/PinyinLyrics】♪", 1080 | "link": "https://www.youtube.com/watch?v=8h38qyC0sx0" 1081 | }, 1082 | { 1083 | "title": "海市蜃楼-三叔『So calm down梦里海市云霞 梦外羽化成她海上楼月镜中花』动态歌词lyrics 高音质", 1084 | "link": "https://www.youtube.com/watch?v=IvZgwqHyvuk" 1085 | }, 1086 | { 1087 | "title": "隊長YoungCaptain - 哪裡都是你【動態歌詞】「你想要的是現在 而不是那遙遠的未來」♪", 1088 | "link": "https://www.youtube.com/watch?v=R46qc7jopF4" 1089 | }, 1090 | { 1091 | "title": "程jiajia - 好想抱住你『我也可以把你當作從沒來過,被一筆帶過 想太多沒結果。』【動態歌詞/Vietsub/Pinyin Lyrics】", 1092 | "link": "https://www.youtube.com/watch?v=Iz5bJbWH7RA" 1093 | }, 1094 | { 1095 | "title": "尹昔眠 - 落在生命裡的光『你是落在我世界裡的一束光,點點滴滴 都讓我嚮往。』【高音質|動態歌詞Lyrics】♫", 1096 | "link": "https://www.youtube.com/watch?v=F2nd69GiShc" 1097 | }, 1098 | { 1099 | "title": "胖虎来唱歌了 - 爱丫爱丫 (Cover: by2)【動態歌詞/Lyrics Video】", 1100 | "link": "https://www.youtube.com/watch?v=D0jtEZqTNe0" 1101 | }, 1102 | { 1103 | "title": "【抖音】等什麼君 - 赤伶「情字難落墨 她唱須以血來和」【動態歌詞】♪", 1104 | "link": "https://www.youtube.com/watch?v=IaqgR0e-ra0" 1105 | }, 1106 | { 1107 | "title": "【戴上耳機♪一秒沉淪】愛上某個人之類的我無法做到,但是渴望被某人所愛,即使不變的昨天一直在繼續!", 1108 | "link": "https://www.youtube.com/watch?v=ePprLM8fA9c" 1109 | }, 1110 | { 1111 | "title": "九九 Sophie Chen x 陳忻玥 Vicky Chen -【Fall in Love】Official MV", 1112 | "link": "https://www.youtube.com/watch?v=99OCenFFIQc" 1113 | }, 1114 | { 1115 | "title": "Janji - Heroes Tonight (feat. Johnning) | Progressive House | NCS - Copyright Free Music", 1116 | "link": "https://www.youtube.com/watch?v=3nQNiWdeH2Q" 1117 | }, 1118 | { 1119 | "title": "《孤勇者》(《英雄聯盟:雙城之戰》動畫劇集中文主題曲)陳奕迅 Eason Chan [Official MV]", 1120 | "link": "https://www.youtube.com/watch?v=Hlp8XD0R5qo" 1121 | }, 1122 | { 1123 | "title": "九九 Sophie Chen -【500天】Official MV", 1124 | "link": "https://www.youtube.com/watch?v=B5ner2-oBGQ" 1125 | }, 1126 | { 1127 | "title": "沒辦法成為你想要的", 1128 | "link": "https://www.youtube.com/watch?v=P19_1Pu2XeU" 1129 | }, 1130 | { 1131 | "title": "TYSM - Normal No More (Lyrics) I don't wanna be normal no more (TikTok Song)", 1132 | "link": "https://www.youtube.com/watch?v=4azCDfMoA9Q" 1133 | }, 1134 | { 1135 | "title": "[繁中/ENG] 酷龍 (클론/Clon) - 繞繞繞 (빙빙빙/Bing Bing Bing) | 中古韓流 KPop Oldies", 1136 | "link": "https://www.youtube.com/watch?v=m4vtI2uQ92k" 1137 | }, 1138 | { 1139 | "title": "F.I.R. 飛兒樂團 [攻無不克Invincible ] Official Music Video (電影「獵殺T-34」中文推廣曲)", 1140 | "link": "https://www.youtube.com/watch?v=-K-HYOmYo90" 1141 | }, 1142 | { 1143 | "title": "Ailee - 깨어나", 1144 | "link": "https://www.youtube.com/watch?v=_hy8FsPd_5o" 1145 | }, 1146 | { 1147 | "title": "J. Cole - Crooked Smile (Video) ft. TLC", 1148 | "link": "https://www.youtube.com/watch?v=fzzMOMkjm8A" 1149 | }, 1150 | { 1151 | "title": "J. Cole - Wet Dreamz", 1152 | "link": "https://www.youtube.com/watch?v=eCGV26aj-mM" 1153 | }, 1154 | { 1155 | "title": "YOASOBI「夜に駆ける」 Official Music Video", 1156 | "link": "https://www.youtube.com/watch?v=x8VYWazR5mE" 1157 | }, 1158 | { 1159 | "title": "理想混蛋 Bestards【愚者】Official Music Video", 1160 | "link": "https://www.youtube.com/watch?v=FYNNLjn-CuI" 1161 | }, 1162 | { 1163 | "title": "小陸 VI - 寫完這首歌我就會放下你了 (Official Audio)", 1164 | "link": "https://www.youtube.com/watch?v=0KMqq10rTrM" 1165 | }, 1166 | { 1167 | "title": "鑽石之心", 1168 | "link": "https://www.youtube.com/watch?v=pqO7M_TFczw" 1169 | }, 1170 | { 1171 | "title": "F.I.R. 飛兒樂團 [ Someday We May Love ] 電影版 Music Video (電影《金錢男孩MONEYBOYS》主題曲)", 1172 | "link": "https://www.youtube.com/watch?v=ZiB9PE9ZWEg" 1173 | }, 1174 | { 1175 | "title": "F.I.R. 飛兒樂團 - Lydia (official 官方完整版MV)", 1176 | "link": "https://www.youtube.com/watch?v=ZOHsd6Zk7DM" 1177 | }, 1178 | { 1179 | "title": "F.I.R. 飛兒樂團 [ 錦繡夢 Splendid Dream ] Official Music Video", 1180 | "link": "https://www.youtube.com/watch?v=fcxNzaSQ6WM" 1181 | }, 1182 | { 1183 | "title": "Miyagi - Небо (текст)", 1184 | "link": "https://www.youtube.com/watch?v=yzsVYTvdsSE" 1185 | }, 1186 | { 1187 | "title": "Kaivaan - Escape (ft. Hikaru Station)", 1188 | "link": "https://www.youtube.com/watch?v=4CkZGcO3_18" 1189 | }, 1190 | { 1191 | "title": "Walk off the Earth ft.D Smoke-Bet On Me『You should bet on me Like I'm Apple in the 90s』【中英lyrics】", 1192 | "link": "https://www.youtube.com/watch?v=uYSVvI6wT1Q" 1193 | }, 1194 | { 1195 | "title": "【單曲】有時候你需要一首歌幫你吶喊", 1196 | "link": "https://www.youtube.com/watch?v=wHb-6P4OWXk" 1197 | }, 1198 | { 1199 | "title": "恭喜你成功發現了寶藏!", 1200 | "link": "https://www.youtube.com/watch?v=fblZQ9AcHCg" 1201 | }, 1202 | { 1203 | "title": "一首好聽的日語歌——《歌に形はないけれど》", 1204 | "link": "https://www.youtube.com/watch?v=id7I8rcaVnA" 1205 | }, 1206 | { 1207 | "title": "敲好聽的日語歌——《black bird》ぼくのりりっくのぼうよみ", 1208 | "link": "https://www.youtube.com/watch?v=YQ6flK8ZuJM" 1209 | }, 1210 | { 1211 | "title": "【戴上耳機♪一秒沉淪】那天遇上了你,從此改變了我!", 1212 | "link": "https://www.youtube.com/watch?v=2mBRwwNA8zw" 1213 | }, 1214 | { 1215 | "title": "【動態歌詞】口是心非 - 夢然『在我最需要你的時候 於是愛恨交錯人消瘦』", 1216 | "link": "https://www.youtube.com/watch?v=-l3o71p3HRo" 1217 | }, 1218 | { 1219 | "title": "買辣椒也用券 - 起風了 (新版)【動態歌詞Lyrics】", 1220 | "link": "https://www.youtube.com/watch?v=3tJUflhYIpo" 1221 | }, 1222 | { 1223 | "title": "口是心非 (煙嗓版) - 半噸兄弟【超好無損音質】【4K】【動態歌詞】Miệng đến trái tim (Phiên bản giọng nói khói) -Half Tons Brothers", 1224 | "link": "https://www.youtube.com/watch?v=789FJzTmjsM" 1225 | }, 1226 | { 1227 | "title": "Lexie Liu 刘柏辛《Manta》韩文翻唱|欧巴Studio x 幸运的Muz", 1228 | "link": "https://www.youtube.com/watch?v=riBc37EsqFs" 1229 | }, 1230 | { 1231 | "title": "张惠妹《你是爱我的/나를 사랑해줘요》韩文版|欧巴Studio x 오늘맑음", 1232 | "link": "https://www.youtube.com/watch?v=I4ftvEEeg9Y" 1233 | }, 1234 | { 1235 | "title": "华晨宇【好想爱这个世界啊/이 세상을 사랑하고 싶어】韩语翻唱|欧巴Studio_오빠스튜디오", 1236 | "link": "https://www.youtube.com/watch?v=4OzYF2bqdHA" 1237 | }, 1238 | { 1239 | "title": "艾辰 - 錯位時空『我吹過你吹過的晚風,那我們算不算相擁。』【動態歌詞Lyrics】", 1240 | "link": "https://www.youtube.com/watch?v=mXf3Klcn-sM" 1241 | }, 1242 | { 1243 | "title": "【韩文版】✨陪你看星星 - 陈子晴|COVER 아빈Kim Abin|OUBA MUSIC", 1244 | "link": "https://www.youtube.com/watch?v=ZskeF0KP4y8" 1245 | }, 1246 | { 1247 | "title": "陳子晴 - 陪你看星星『想陪你翻山越嶺,想陪你追著日落看星星。』【動態歌詞Lyrics】", 1248 | "link": "https://www.youtube.com/watch?v=WIcXpNCXaLk" 1249 | }, 1250 | { 1251 | "title": "陳忻玥 Vicky Chen -【Treasure】Official MV", 1252 | "link": "https://www.youtube.com/watch?v=Fmlcr4Jlx9I" 1253 | }, 1254 | { 1255 | "title": "江南一夜", 1256 | "link": "https://www.youtube.com/watch?v=Qss9qbmCZ6o" 1257 | }, 1258 | { 1259 | "title": "王澤科 - 告辭『我還要裝作若無其事的樣子...』【動態歌詞Lyrics】", 1260 | "link": "https://www.youtube.com/watch?v=BJaisxQbHdE" 1261 | }, 1262 | { 1263 | "title": "space x - 墜落玫瑰『是否這世界太黑,只能用墜落玫瑰 I'm lost for you。』【動態Lyrics|高音質】♫", 1264 | "link": "https://www.youtube.com/watch?v=J-s_hOwkxMo" 1265 | }, 1266 | { 1267 | "title": "蔡恩雨 Priscilla Abby《 不要讓我太喜歡你》官方 Official MV", 1268 | "link": "https://www.youtube.com/watch?v=UrJvkWzOyV0" 1269 | }, 1270 | { 1271 | "title": "不加冰可乐 - 三妹『谈不上我有多难过, 只是觉得 有点不快乐』【動態歌詞Pinyin Lyrics】", 1272 | "link": "https://www.youtube.com/watch?v=DSG7U_8pH7Q" 1273 | }, 1274 | { 1275 | "title": "樑爽涼爽 《根本你不懂得爱我/根本你不懂得愛我》『今天你笑不出』 動態歌詞", 1276 | "link": "https://www.youtube.com/watch?v=zE09-N1OKMw" 1277 | }, 1278 | { 1279 | "title": "space x - 0321【動態歌詞】「在看不到的夜裡 我時刻在想你 你是否能聽清」♪", 1280 | "link": "https://www.youtube.com/watch?v=MBnU0k25O8I" 1281 | }, 1282 | { 1283 | "title": "林俊傑 JJ Lin - 可惜沒如果 ( 歌詞/lyrics)", 1284 | "link": "https://www.youtube.com/watch?v=TRt4Y6c0ql0" 1285 | }, 1286 | { 1287 | "title": "Greatest Strength", 1288 | "link": "https://www.youtube.com/watch?v=fyRaPGJJLwc" 1289 | }, 1290 | { 1291 | "title": "【CC中日字幕】咒術迴戰 0 劇場版 ED 「逆夢」完整版 By King Gnu / Jujutsu Kaisen 0 Ending - Sakayume", 1292 | "link": "https://www.youtube.com/watch?v=j5pUc62hqkU" 1293 | }, 1294 | { 1295 | "title": "TRASH【終究還是因為愛】Cover By 方晨《TC Studio》", 1296 | "link": "https://www.youtube.com/watch?v=F8h4fD7BnYE" 1297 | }, 1298 | { 1299 | "title": "【梨泰院Class OST】Gaho - 開始 Beginning / Start Over【歌詞翻譯】", 1300 | "link": "https://www.youtube.com/watch?v=5229fIlU1FU" 1301 | }, 1302 | { 1303 | "title": "任然 - 對不起沒關係『請你照顧好自己,相信我會忘記你。』【動態歌詞Lyrics】", 1304 | "link": "https://www.youtube.com/watch?v=HTw1ZVBOP7A" 1305 | }, 1306 | { 1307 | "title": "【HD】孫藝軒 - 一不小心 [歌詞字幕][完整高清音質] ♫ Sun Yi Xuan - Accidentally", 1308 | "link": "https://www.youtube.com/watch?v=LTifgsAvGSQ" 1309 | }, 1310 | { 1311 | "title": "Wake (Hillsong Young and Free) lyric video", 1312 | "link": "https://www.youtube.com/watch?v=io2WOQ-3aVs" 1313 | }, 1314 | { 1315 | "title": "Kane Brown - Good as You (Official Music Video)", 1316 | "link": "https://www.youtube.com/watch?v=mS3TeZEp_PE" 1317 | }, 1318 | { 1319 | "title": "林怡婕 - 習慣想你『也許是我還沒習慣身邊少了你,也許只是習慣想你 還不會暫停。』【動態歌詞/Vietsub/PInyin Lyrics】", 1320 | "link": "https://www.youtube.com/watch?v=i7-pG1r4KzQ" 1321 | }, 1322 | { 1323 | "title": "血氧計 - 蒲公英「說你愛我,又墜入了星河 不由自主的搖擺著。」【Pinyin Lyrics】", 1324 | "link": "https://www.youtube.com/watch?v=N9r5RMnZ5nw" 1325 | }, 1326 | { 1327 | "title": "【中日歌詞】國王排名 ED | Ranking of Kings ED | 王様ランキング ED |「Oz.」 By yama Full Ending《純粹中翻》", 1328 | "link": "https://www.youtube.com/watch?v=M9wx6duYx0Y" 1329 | }, 1330 | { 1331 | "title": "Wanting 曲婉婷 - 我的歌声里 (You Exist In My Song) [Trad. Chinese] [Official Music Video]", 1332 | "link": "https://www.youtube.com/watch?v=w0dMz8RBG7g" 1333 | }, 1334 | { 1335 | "title": "鞠婧祎 叹云兮 ( 芸汐传 片尾曲 )『别怨我不在身边 记住 我会在你的心里面 』 【动态歌词lyrics】 ♪MayMusicChannel♪", 1336 | "link": "https://www.youtube.com/watch?v=aGaqPKKJwOI" 1337 | }, 1338 | { 1339 | "title": "TRUE「Sincerely」 MV Full Size 『ヴァイオレット・エヴァーガーデン』OP主題歌/\"violet-evergarden\" Opning Theme「Sincerely」", 1340 | "link": "https://www.youtube.com/watch?v=uwph0dv9E6U" 1341 | }, 1342 | { 1343 | "title": "Free Loop by Daniel Powter Lyrics", 1344 | "link": "https://www.youtube.com/watch?v=AAPHPvMFo_Q" 1345 | }, 1346 | { 1347 | "title": "Daniel Powter - Free Loop (Official Music Video)", 1348 | "link": "https://www.youtube.com/watch?v=vEY_mg2y-rg" 1349 | }, 1350 | { 1351 | "title": "姚斯婷 -黃昏 【女聲版帶給你不一樣的聽覺盛宴】", 1352 | "link": "https://www.youtube.com/watch?v=KVbma4AT4iI" 1353 | }, 1354 | { 1355 | "title": "周傳雄 Steve Chou - 黃昏", 1356 | "link": "https://www.youtube.com/watch?v=6ca_YHZvzls" 1357 | }, 1358 | { 1359 | "title": "TRASH《超級英雄的約定 Super Hero》Live in LA (Official Music Video)", 1360 | "link": "https://www.youtube.com/watch?v=4EgTtcE3Lmc" 1361 | }, 1362 | { 1363 | "title": "玖壹壹(Nine one one)-嫁給我吧 官方MV首播", 1364 | "link": "https://www.youtube.com/watch?v=UapMQdq0NB4" 1365 | }, 1366 | { 1367 | "title": "TRASH《終究還是因為愛 LOVE》Official Music Video", 1368 | "link": "https://www.youtube.com/watch?v=fl1Wbd-ldMQ" 1369 | }, 1370 | { 1371 | "title": "隊長YoungCaptain - 樓頂上的小斑鳩『沒能出現在你的眼前,我的悲傷被你藏在深夜。』【動態歌詞Lyrics】", 1372 | "link": "https://www.youtube.com/watch?v=HbgZsS-uDrE" 1373 | }, 1374 | { 1375 | "title": "陳冰 - 一個人 “這個版本是否也會聽的你撕心裂肺”", 1376 | "link": "https://www.youtube.com/watch?v=-px4Jtug0JA" 1377 | }, 1378 | { 1379 | "title": "周杰倫 Jay Chou【手寫的從前 Handwritten Past】Official MV", 1380 | "link": "https://www.youtube.com/watch?v=TMB6-YflpA4" 1381 | }, 1382 | { 1383 | "title": "周杰倫 Jay Chou【對不起 Sorry】Official MV", 1384 | "link": "https://www.youtube.com/watch?v=N2DkKFxijv0" 1385 | }, 1386 | { 1387 | "title": "羅志祥Show Lo-惜命命You are mine (Official HD MV)", 1388 | "link": "https://www.youtube.com/watch?v=dJ2rAZ7jozA" 1389 | }, 1390 | { 1391 | "title": "王忻辰/蘇星婕 - 清空【動態歌詞】「是我愛的太蠢太過天真 才會把你的寂寞當作契合的靈魂」♪", 1392 | "link": "https://www.youtube.com/watch?v=U2URlwurXNw" 1393 | }, 1394 | { 1395 | "title": "KeyKey - 零點『墻上的倒計時讓我們又回到零點,如果有時光機我想要重新來一遍。』【動態歌詞/Vietsub/Pinyin Lyrics】", 1396 | "link": "https://www.youtube.com/watch?v=L6hMvZGXzjY" 1397 | }, 1398 | { 1399 | "title": "Kelly Clarkson - Because Of You (VIDEO)", 1400 | "link": "https://www.youtube.com/watch?v=Ra-Om7UMSJc" 1401 | }, 1402 | { 1403 | "title": "[마룬파이브 신곡🌈] Beautiful Mistakes - Maroon 5, Megan Thee Stallion (female cover)", 1404 | "link": "https://www.youtube.com/watch?v=VB-itZhF3Js" 1405 | }, 1406 | { 1407 | "title": "Maroon 5 - Beautiful Mistakes ft. Megan Thee Stallion (Official Music Video)", 1408 | "link": "https://www.youtube.com/watch?v=BSzSn-PRdtI" 1409 | }, 1410 | { 1411 | "title": "周杰倫 Jay Chou【退後 A Step Back】-Official Music Video", 1412 | "link": "https://www.youtube.com/watch?v=0-4mm0e2h44" 1413 | }, 1414 | { 1415 | "title": "yihuik苡慧 - 致你【動態歌詞】「若想念是凋謝的雲 乘著風也飄向你 降落在你耳邊低語」♪", 1416 | "link": "https://www.youtube.com/watch?v=zw9EVo6r5Gs" 1417 | }, 1418 | { 1419 | "title": "Nostalgia trip back to childhood 🍧 Childhood songs", 1420 | "link": "https://www.youtube.com/watch?v=P64hxFjZ3Vg" 1421 | }, 1422 | { 1423 | "title": "Gym Class Heroes: Stereo Hearts ft. Adam Levine [OFFICIAL VIDEO]", 1424 | "link": "https://www.youtube.com/watch?v=T3E9Wjbq44E" 1425 | }, 1426 | { 1427 | "title": "Alan Walker, CORSAK & Huang Xiaoyun - Sad Sometimes (Lyrics)", 1428 | "link": "https://www.youtube.com/watch?v=O2q59LClA7Q" 1429 | }, 1430 | { 1431 | "title": "胡梦周马吟吟《溯(Reverse)》“溯”的意思是逆流而上 我对你的爱也是 「躲进你的身体 进入温暖的你」#为歌而赞|纯享 ZJSTV #live", 1432 | "link": "https://www.youtube.com/watch?v=IN6_gECYOBI" 1433 | }, 1434 | { 1435 | "title": "CORSAK - 溯(Reverse) Feat. 馬吟吟『Alan Walker 鼎力推薦的中國電音製作人!』【動態歌詞Lyrics】", 1436 | "link": "https://www.youtube.com/watch?v=lrDlTEbHw3g" 1437 | }, 1438 | { 1439 | "title": "孫盛希 shi shi【恆溫】Official Music Video HD (華視偶像劇「巷弄裡的那家書店」插曲)", 1440 | "link": "https://www.youtube.com/watch?v=O381ioChc-I" 1441 | }, 1442 | { 1443 | "title": "蔣小呢 - for ya『所有美好全部come for ya,我的愛也全部come for ya。』【動態歌詞Lyrics】", 1444 | "link": "https://www.youtube.com/watch?v=a42f6Oe_4P8" 1445 | }, 1446 | { 1447 | "title": "茄子蛋EggPlantEgg - 閣愛妳一擺 Love You One More Time (Official Music Video)", 1448 | "link": "https://www.youtube.com/watch?v=PJJhHihvDpo" 1449 | }, 1450 | { 1451 | "title": "戴羽彤 - 來遲【動態歌詞】「我這一次終究還是來得太遲 錯過了你 此後所有的故事」♪", 1452 | "link": "https://www.youtube.com/watch?v=4cjSifTaLhg" 1453 | }, 1454 | { 1455 | "title": "Bater Official -[ Joker 2019](抖音2020火爆歌曲)", 1456 | "link": "https://www.youtube.com/watch?v=uqdHQElo0zc" 1457 | }, 1458 | { 1459 | "title": "Zedd - I Want You To Know ft. Selena Gomez", 1460 | "link": "https://www.youtube.com/watch?v=X46t8ZFqUB4" 1461 | }, 1462 | { 1463 | "title": "SLANDER - Love Is Gone ft. Dylan Matthew (Acoustic)", 1464 | "link": "https://www.youtube.com/watch?v=hCrtcVDgCGw" 1465 | }, 1466 | { 1467 | "title": "中島美嘉 - 僕が死のうと思ったのは / THE FIRST TAKE", 1468 | "link": "https://www.youtube.com/watch?v=AabAbM_Lmuo" 1469 | }, 1470 | { 1471 | "title": "Hyouka [Amv] No Friends", 1472 | "link": "https://www.youtube.com/watch?v=5nR1bFsfApA" 1473 | }, 1474 | { 1475 | "title": "是七叔呢 - 半生雪【動態歌詞】「半生風雪 吹不散歲月留下的眼淚」♪", 1476 | "link": "https://www.youtube.com/watch?v=lAZc4uOsSxo" 1477 | }, 1478 | { 1479 | "title": "Jujutsu Kaisen - Opening Full『Kaikai Kitan』by Eve", 1480 | "link": "https://www.youtube.com/watch?v=i1P-9IspBus" 1481 | }, 1482 | { 1483 | "title": "OmgLoSteve - Too Late ft. Addie Nicole | ♫ Copyright Free Music", 1484 | "link": "https://www.youtube.com/watch?v=LGJc37IPQ-I" 1485 | }, 1486 | { 1487 | "title": "Electro-Light - Symbolism | Trap | NCS - Copyright Free Music", 1488 | "link": "https://www.youtube.com/watch?v=__CRWE-L45k" 1489 | }, 1490 | { 1491 | "title": "《2020年度抖音流行歌曲 MASHUP》| cover 高芸歆 | MxA Music #串燒", 1492 | "link": "https://www.youtube.com/watch?v=2JoNqy4Su2c" 1493 | }, 1494 | { 1495 | "title": "Songs that bring back so many memories... I really really miss those days", 1496 | "link": "https://www.youtube.com/watch?v=Uca596RniwI" 1497 | }, 1498 | { 1499 | "title": "Fly By Midnight x Zaeden - Settle Down (Official Video)", 1500 | "link": "https://www.youtube.com/watch?v=GG8JsZibPhA" 1501 | }, 1502 | { 1503 | "title": "▽We Don't Talk Anymore《我們不再交談》 -Fly By Midnight (ft. Nicolette Mare & Nicole Medoro)cover中文字幕▽", 1504 | "link": "https://www.youtube.com/watch?v=hMLf9DhFH8Y" 1505 | }, 1506 | { 1507 | "title": "黃鴻升 Alien Huang【忘了怎麼快樂 Forgotten happiness】Official Music Video HD", 1508 | "link": "https://www.youtube.com/watch?v=nOv5XzRYEOU" 1509 | }, 1510 | { 1511 | "title": "【抖音合集】10首是七叔呢翻唱合集来了 Top 100 Tik Tok 顫音中文音樂2021 2021必聽 是七叔呢 Shi Qi Shu Ne 最受欢迎的10首歌曲2021年", 1512 | "link": "https://www.youtube.com/watch?v=7aSGmZ-CsBE" 1513 | }, 1514 | { 1515 | "title": "謝和弦 R-chord - 那不是雪中紅 Snow Red (Official Music Video)", 1516 | "link": "https://www.youtube.com/watch?v=qZU63nWWS6M" 1517 | }, 1518 | { 1519 | "title": "黃鴻升 Alien Huang 柯有倫 Alan Kuo 竇智孔 Bobby Dou 【扛得住 Carry On】Official Music Video", 1520 | "link": "https://www.youtube.com/watch?v=qFbnc9M9BFk" 1521 | }, 1522 | { 1523 | "title": "是七叔呢 - 踏山河【動態歌詞】「長槍刺破雲霞 放下一生牽掛」♪", 1524 | "link": "https://www.youtube.com/watch?v=1v1CiLQXho8" 1525 | }, 1526 | { 1527 | "title": "【高音質】J.Sheon-畫面太美不敢直視", 1528 | "link": "https://www.youtube.com/watch?v=DgzVTF-DBd8" 1529 | }, 1530 | { 1531 | "title": "Kill The Game (Original Mix) - Round_2、贰万、早安 ♪ || 2022年最劲爆的抖音歌曲 | 最强抖音BGM | 抖音 | TikTok", 1532 | "link": "https://www.youtube.com/watch?v=D_imnJfPGFA" 1533 | }, 1534 | { 1535 | "title": "Azora Chin 尤长靖 - 一颗星的夜( Official Music Video)", 1536 | "link": "https://www.youtube.com/watch?v=10f2UitzQS4" 1537 | }, 1538 | { 1539 | "title": "纯享:等一下就回家《洄》浓厚中国风在线狙击 | 少年说唱企划 EP12 | New Generation Hip-Hop Project | iQiyi精选", 1540 | "link": "https://www.youtube.com/watch?v=efYii6-s2R0" 1541 | }, 1542 | { 1543 | "title": "林俊傑 JJ Lin【只對你說 Sarang Heyo 사랑해요】官方完整版 MV", 1544 | "link": "https://www.youtube.com/watch?v=pYe3FP2HnGg" 1545 | }, 1546 | { 1547 | "title": "九局下半重置版!!!MC Hotdog X 2Pac-九局下半(Remix)", 1548 | "link": "https://www.youtube.com/watch?v=FpKd00wd5T0" 1549 | }, 1550 | { 1551 | "title": "Tizzy T ft. Person - Going Go 歌词版(原版竟然这么好听!)", 1552 | "link": "https://www.youtube.com/watch?v=ZE5r1b941RM" 1553 | }, 1554 | { 1555 | "title": "纯享:Tizzy T《冲吧少年》输出热诚不息的“T式”音乐态度 | 少年说唱企划 EP11 | New Generation Hip-Hop Project | iQiyi精选", 1556 | "link": "https://www.youtube.com/watch?v=XhdSaYMJKug" 1557 | }, 1558 | { 1559 | "title": "纯享:JBcob《我不会数绵羊只会数拍子》浪漫情歌旋律上头 | 少年说唱企划 EP11 | New Generation Hip-Hop Project | iQiyi精选", 1560 | "link": "https://www.youtube.com/watch?v=eeQfh4Z2agM" 1561 | }, 1562 | { 1563 | "title": "纯享:VAVA《如果》讲述奋斗人生的真实写照 个中心酸感动赚人泪下 | 爆裂舞台 EP10 | Stage Boom | iQiyi精选", 1564 | "link": "https://www.youtube.com/watch?v=SCsGZIE5sBk" 1565 | }, 1566 | { 1567 | "title": "纯享:Capper《纵容》上头hook开口即HitSong | 少年说唱企划 EP11 | New Generation Hip-Hop Project | iQiyi精选", 1568 | "link": "https://www.youtube.com/watch?v=GJQ7pA_mnZo" 1569 | }, 1570 | { 1571 | "title": "【中英字幕】Dream it possible— Delacey 夢想成真", 1572 | "link": "https://www.youtube.com/watch?v=7yBMlZw99WU" 1573 | }, 1574 | { 1575 | "title": "大籽 - 白月光與硃砂痣『白月光在照耀 你才想起她的好,硃砂痣久難消 你是否能知道。』【動態歌詞Lyrics】", 1576 | "link": "https://www.youtube.com/watch?v=wPef4yQVRn8" 1577 | }, 1578 | { 1579 | "title": "MC/Hotdog - 九局下半『青春像是一場棒球比賽 三人出局』【動態歌詞Lyrics】", 1580 | "link": "https://www.youtube.com/watch?v=aRv3UUzj8U8" 1581 | }, 1582 | { 1583 | "title": "【HD】【經典歌曲】JS-殺破狼 [最高音質]【2004熱歌榜】字幕版", 1584 | "link": "https://www.youtube.com/watch?v=-mC3tZESTSs" 1585 | }, 1586 | { 1587 | "title": "鞠文嫻 - BINGBIAN病變 (女聲版) Feat. Deepain【動態歌詞Lyrics】", 1588 | "link": "https://www.youtube.com/watch?v=ZFw6rTEw1hA" 1589 | }, 1590 | { 1591 | "title": "CG - 文愛「知道愛你 沒有結局,癡心妄想你會給我甜蜜。」動態歌詞版MV", 1592 | "link": "https://www.youtube.com/watch?v=TQ5w9KHHa9M" 1593 | }, 1594 | { 1595 | "title": "PIZZALI【翼 WING】", 1596 | "link": "https://www.youtube.com/watch?v=SIcWXHk0Rfw" 1597 | }, 1598 | { 1599 | "title": "SoMo - 50 Feet (lyrics)", 1600 | "link": "https://www.youtube.com/watch?v=G7F1eEKhvrs" 1601 | }, 1602 | { 1603 | "title": "秋原依 - 錯季【動態歌詞】「春的顏色不走進秋季 有些愛情就經不起季節輪替」♪", 1604 | "link": "https://www.youtube.com/watch?v=zZmtt5g4tHs" 1605 | }, 1606 | { 1607 | "title": "纯享:Lil Milk《爸爸让我回家但我输不了啊》致敬摇滚玩转旋律 | 少年说唱企划 EP08 | New Generation Hip-Hop Project | iQiyi精选", 1608 | "link": "https://www.youtube.com/watch?v=lMW-xEyANKc" 1609 | }, 1610 | { 1611 | "title": "王謙 Goatak【What Can I】Official Music Video", 1612 | "link": "https://www.youtube.com/watch?v=nVrNWV_GeWs" 1613 | }, 1614 | { 1615 | "title": "thehopend - 小海灘 (Live Version)", 1616 | "link": "https://www.youtube.com/watch?v=Gt01GXcgEHE" 1617 | }, 1618 | { 1619 | "title": "【陰陽師Onmyoji】不知火主題曲「離島之歌」", 1620 | "link": "https://www.youtube.com/watch?v=Y3mcydB-D_0" 1621 | }, 1622 | { 1623 | "title": "MY ALL / 浜崎あゆみ", 1624 | "link": "https://www.youtube.com/watch?v=fZsMkAAx9JI" 1625 | }, 1626 | { 1627 | "title": "ラムジ - PLANET『我是一顆行星,不停地圍繞你轉動。』【中日動態歌詞Lyrics】", 1628 | "link": "https://www.youtube.com/watch?v=G5rBqeiZgP4" 1629 | }, 1630 | { 1631 | "title": "鈴木瑛美子 / kIng Music Video(TVアニメ「キングダム」第2クールED)(3.30発売 1stアルバム「5 senses」収録)", 1632 | "link": "https://www.youtube.com/watch?v=RxH4aMnlGSk" 1633 | }, 1634 | { 1635 | "title": "BiSH / TOMORROW [OFFiCiAL ViDEO]", 1636 | "link": "https://www.youtube.com/watch?v=0_5tgikzOJg" 1637 | }, 1638 | { 1639 | "title": "YOASOBI「たぶん」Official Music Video", 1640 | "link": "https://www.youtube.com/watch?v=8iuLXODzL04" 1641 | }, 1642 | { 1643 | "title": "纯享:等一下就回家《峻岑》仙侠风说唱带你行走江湖! | 少年说唱企划 EP06 | New Generation Hip-Hop Project | iQiyi精选", 1644 | "link": "https://www.youtube.com/watch?v=UtWUeRfa2mk" 1645 | }, 1646 | { 1647 | "title": "《少年說唱企劃》纯享:歐陽潇楓 & 林志越Steven & COWBOY《NOBODY》 | 愛奇藝", 1648 | "link": "https://www.youtube.com/watch?v=e8l2gFVSJ0w" 1649 | }, 1650 | { 1651 | "title": "《少年說唱企劃》純享:Capper & lil milk《芳心縱火案》 | 愛奇藝", 1652 | "link": "https://www.youtube.com/watch?v=wMf8qpgT4ig" 1653 | }, 1654 | { 1655 | "title": "McLean - Broken - Explicit Version", 1656 | "link": "https://www.youtube.com/watch?v=jTp-PPy2-wU" 1657 | }, 1658 | { 1659 | "title": "🎶🎶🎶 人間過客 - 喬洋 黃靜美【問天命人間過客怎系情愫遺憾落幾層浮屠】動態歌詞🎶🎶🎶", 1660 | "link": "https://www.youtube.com/watch?v=h-8GuK44Uqc" 1661 | }, 1662 | { 1663 | "title": "《少年說唱企劃》純享:ksovii & 等一下就回家《天地在兜裡我是葉一片》 | 愛奇藝", 1664 | "link": "https://www.youtube.com/watch?v=MXfq8w8AbZo" 1665 | }, 1666 | { 1667 | "title": "NINEONE 乃万 :风的颜色 🍃🍃🍃【 LYRIC VIDEO 】", 1668 | "link": "https://www.youtube.com/watch?v=Sbp0uFfKPoo" 1669 | }, 1670 | { 1671 | "title": "[슈가송] 드디어 찾아낸 목소리의 주인공! 프리스타일x정희경 'Y'♪ 슈가맨3(SUGARMAN3) 7회", 1672 | "link": "https://www.youtube.com/watch?v=FlCtGXvDzaE" 1673 | }, 1674 | { 1675 | "title": "[M/V] Free Style(프리스타일) - Y (Please Tell Me Why)", 1676 | "link": "https://www.youtube.com/watch?v=dYIT_jeUBKg" 1677 | }, 1678 | { 1679 | "title": "小藍背心 - 目及皆是你『我戒不掉你 像戒不了呼吸,漫長的距離 我用思念來代替。』【動態歌詞/Vietsub/Pinyin Lyrics】", 1680 | "link": "https://www.youtube.com/watch?v=sUDd47mjkQE" 1681 | }, 1682 | { 1683 | "title": "MindaRyn - Like Flames (\"That Time I Got Reincarnated as a Slime\" Opening Theme Song) | Music Video", 1684 | "link": "https://www.youtube.com/watch?v=q8TGietS5Q0" 1685 | }, 1686 | { 1687 | "title": "DP龍豬/Swei水/Rays陳袁 - 風吹一夏『風吹過我的頭髮,淋著雨我就站在你家樓下。』【動態歌詞Lyrics】", 1688 | "link": "https://www.youtube.com/watch?v=R6JZzZTOdvA" 1689 | }, 1690 | { 1691 | "title": "Aioz -【22秒】| Cover 7en | Pocats Studio", 1692 | "link": "https://www.youtube.com/watch?v=CNBRm9a6pu8" 1693 | }, 1694 | { 1695 | "title": "XMASwu - 7%【動態歌詞】「你操縱我的時空 撲入我懷中」♪", 1696 | "link": "https://www.youtube.com/watch?v=08v_Ri81DlE" 1697 | }, 1698 | { 1699 | "title": "我们打着光脚在风车下跑,手上的狗尾巴草摇啊摇 (feat. 艾兜)", 1700 | "link": "https://www.youtube.com/watch?v=3RZ-7gcgvRU" 1701 | }, 1702 | { 1703 | "title": "Numb (Official Music Video) [4K UPGRADE] – Linkin Park", 1704 | "link": "https://www.youtube.com/watch?v=kXYiU_JCYtU" 1705 | }, 1706 | { 1707 | "title": "王艷薇 Evangeline -【保存期限Expiration Date】|Official MV", 1708 | "link": "https://www.youtube.com/watch?v=H5wD24TqhJM" 1709 | }, 1710 | { 1711 | "title": "Yen-j嚴爵【暫時的男朋友Temporary BF】MV官方完整版", 1712 | "link": "https://www.youtube.com/watch?v=88m2XdyGXRY" 1713 | }, 1714 | { 1715 | "title": "Ember Island - Need You (Leonrun Remix)", 1716 | "link": "https://www.youtube.com/watch?v=SunjDtNBmJk" 1717 | }, 1718 | { 1719 | "title": "節奏感超強的純音樂【十四期】到不了的地方叫做遠方", 1720 | "link": "https://www.youtube.com/watch?v=J7qtMG72RB8" 1721 | }, 1722 | { 1723 | "title": "《潘多拉》完整版 -造物法則主题曲 (日文)", 1724 | "link": "https://www.youtube.com/watch?v=oCR62O7ijBg" 1725 | }, 1726 | { 1727 | "title": "「Scarborough Fair」史卡博羅市集-山田タマル (中英字幕)", 1728 | "link": "https://www.youtube.com/watch?v=jqOtTy2xPn0" 1729 | }, 1730 | { 1731 | "title": "猫 / DISH// (Covered by こぴ)", 1732 | "link": "https://www.youtube.com/watch?v=LOiiuvL2gP8" 1733 | }, 1734 | { 1735 | "title": "DISH// (北村匠海) - 猫 / THE FIRST TAKE", 1736 | "link": "https://www.youtube.com/watch?v=gsT6eKsnT0M" 1737 | }, 1738 | { 1739 | "title": "一首超好聽的日語歌——《I hate me》Lily.μ《一人度過無聊時間》", 1740 | "link": "https://www.youtube.com/watch?v=umlPqbpDHKk" 1741 | }, 1742 | { 1743 | "title": "[MAD][来自风平浪静的明天Nagi no AsuKara] 光-爱花", 1744 | "link": "https://www.youtube.com/watch?v=pOu9beF0qwQ" 1745 | }, 1746 | { 1747 | "title": "【歌ってみた】生きていたんだよな / Covered by 獅子神レオナ【あいみょん 】", 1748 | "link": "https://www.youtube.com/watch?v=IYMv_YKlvMQ" 1749 | }, 1750 | { 1751 | "title": "《多首好聽的日文神曲 》Anime Music--6首 個人收藏 傷心 感傷 作業用 日文歌曲 【純音樂】[#02]", 1752 | "link": "https://www.youtube.com/watch?v=XpQy0vzKBcY" 1753 | }, 1754 | { 1755 | "title": "【tk極推薦】雙笙 - 心做し「這樣的事我不懂啊,不要讓我獨自一人。」 [ High Quality Lyrics ][ 中日字幕 ] 虐心 GUMI Best Cover", 1756 | "link": "https://www.youtube.com/watch?v=omMpiWlthI4" 1757 | }, 1758 | { 1759 | "title": "超好聽的日語歌曲——《君だったら》HAPPY BIRTHDAY", 1760 | "link": "https://www.youtube.com/watch?v=dpMVLrdzhuY" 1761 | }, 1762 | { 1763 | "title": "吳克羣《愛太痛》Official 完整版 MV [HD]", 1764 | "link": "https://www.youtube.com/watch?v=LDQQJ-RkHrM" 1765 | }, 1766 | { 1767 | "title": "DAOKO × 米津玄師『打上花火』MUSIC VIDEO", 1768 | "link": "https://www.youtube.com/watch?v=-tKVN2mAKRI" 1769 | }, 1770 | { 1771 | "title": "紀儀羚 Kirki | 羚著吉他KI唱歌系列 - 愛,存在 [ 原唱 魏奇奇 ] ( 翻唱 Cover 自彈自唱 愛存在)", 1772 | "link": "https://www.youtube.com/watch?v=jzDd7AM_RsU" 1773 | }, 1774 | { 1775 | "title": "未接來電 - 莫宰羊 Covered by 陳忻玥", 1776 | "link": "https://www.youtube.com/watch?v=m-aK4wuI8B8" 1777 | }, 1778 | { 1779 | "title": "Marz23 Ft. 莫宰羊 & 頤原【最美的風景 Fight With The Demon】防疫版 stay home sessions", 1780 | "link": "https://www.youtube.com/watch?v=vS4tJyxPG2U" 1781 | }, 1782 | { 1783 | "title": "王艷薇 Evangeline -【離開我的依賴 Leaving】|Official MV", 1784 | "link": "https://www.youtube.com/watch?v=p13tH7Etlzc" 1785 | }, 1786 | { 1787 | "title": "武陵高中第63屆畢業歌《我的冰箱裡有企鵝》Official Music Video", 1788 | "link": "https://www.youtube.com/watch?v=DUR7jlt1Xlg" 1789 | }, 1790 | { 1791 | "title": "【中日歌詞】愛にできることはまだあるかい (Is There Still Anything That Love Can Do?) -RADWIMPS|天氣之子OST", 1792 | "link": "https://www.youtube.com/watch?v=iQs-f88RBws" 1793 | }, 1794 | { 1795 | "title": "劉大壯 - 我很好(正式版)『我很好,反正一直都是偶爾被需要。我很好,就算再冷我也只相信外套。』【動態歌詞Lyrics】", 1796 | "link": "https://www.youtube.com/watch?v=22owBmpwokA" 1797 | }, 1798 | { 1799 | "title": "卓文萱 Genie Chuo&黃鴻升 Alien Huang【愛的主旋律】Official Music Video", 1800 | "link": "https://www.youtube.com/watch?v=jqdQUQqaDdU" 1801 | }, 1802 | { 1803 | "title": "刘悦 - 那一首歌 『有没有一首歌会让你瞬间掉眼泪 有没有一句词会让你想喝下一杯 有没有一个和旋让你忘却了疲惫 有没有一个音色你想知道他是谁』【動態歌詞Lyrics】【说唱新时代】高清音質", 1804 | "link": "https://www.youtube.com/watch?v=s9jinFWkga4" 1805 | }, 1806 | { 1807 | "title": "【官方正式版MV】會不會 - 劉大壯 | 這份愛 會不會 會不會讓你也好疲憊 |Official Music Video", 1808 | "link": "https://www.youtube.com/watch?v=L92TYQ3Uv34" 1809 | }, 1810 | { 1811 | "title": "5th FGO Anniversary AMV |「躍動」-坂本真綾あ", 1812 | "link": "https://www.youtube.com/watch?v=InkLyMHXtS4" 1813 | }, 1814 | { 1815 | "title": "【HD】雲雀 Hibari ASCA大倉明日香 艾梅洛閣下II世事件簿 魔眼蒐集列車 ED (中日字幕)", 1816 | "link": "https://www.youtube.com/watch?v=XwNDnhWT1z4" 1817 | }, 1818 | { 1819 | "title": "「Prover-milet」見證者 絶対魔獣戦線バビロニア ED2 FGO巴比倫尼亞 ED2 (中日字幕)", 1820 | "link": "https://www.youtube.com/watch?v=xahEdP2eJs4" 1821 | }, 1822 | { 1823 | "title": "[MV]炎 (Homura) Cover - LiSA 『Kimetsu no Yaiba The Movie : Mugen Train』 Cover by yurisa", 1824 | "link": "https://www.youtube.com/watch?v=TGcCO8owvgU" 1825 | }, 1826 | { 1827 | "title": "[MV]雪の華 - 中島 美嘉(Nakashima Mika) Cover by yurisa", 1828 | "link": "https://www.youtube.com/watch?v=TAMyLwW9HW8" 1829 | }, 1830 | { 1831 | "title": "TOP 10 MUSIC COVER by KOBASOLO", 1832 | "link": "https://www.youtube.com/watch?v=ZcQYk9NtpVo" 1833 | }, 1834 | { 1835 | "title": "【女性が歌う】別の人の彼女になったよ / wacci(Covered by コバソロ & 相沢)", 1836 | "link": "https://www.youtube.com/watch?v=sEJKG60a1Zc" 1837 | }, 1838 | { 1839 | "title": "蕭敬騰 背叛~清晰版@超級星光大道", 1840 | "link": "https://www.youtube.com/watch?v=0jB33fwLQO4" 1841 | }, 1842 | { 1843 | "title": "Marz23 x 莫宰羊 -【最美的風景 Fight With The Demon】Official Music Video", 1844 | "link": "https://www.youtube.com/watch?v=f56eHwC8jEQ" 1845 | }, 1846 | { 1847 | "title": "抖音 程jiajia - 山楂樹之戀(女声) ♬『我的山楂树之恋 永远站在你的身边』《動態歌詞Lyrics》", 1848 | "link": "https://www.youtube.com/watch?v=IFMcyb4yxBc" 1849 | }, 1850 | { 1851 | "title": "謝和弦R-chord&陳彥允Ian【 親愛的女神 Dear Goddess 】演出Swagger:可可.柔柔.伊伊|萌寵:謝燙燙 Official Music Video", 1852 | "link": "https://www.youtube.com/watch?v=McjxMLDJa4Q" 1853 | }, 1854 | { 1855 | "title": "R3HAB & 蔡依林 Jolin Tsai《Stars Align》Official Music Video", 1856 | "link": "https://www.youtube.com/watch?v=--giQqhWGdQ" 1857 | }, 1858 | { 1859 | "title": "蔡依林 Jolin Tsai - 單身公害", 1860 | "link": "https://www.youtube.com/watch?v=to1slJyu3ow" 1861 | }, 1862 | { 1863 | "title": "心做し REC映像【まじ娘】", 1864 | "link": "https://www.youtube.com/watch?v=QQPVQFyL0_Y" 1865 | }, 1866 | { 1867 | "title": "《15强歌曲纯享》魏巡:《开门见山》 Super Boy2017【快男超女官方频道】", 1868 | "link": "https://www.youtube.com/watch?v=zWYGBu06G98" 1869 | }, 1870 | { 1871 | "title": "茄子蛋EggPlantEgg - 愛情你比我想的閣較偉大 (Official Music Video)《當男人戀愛時》電影主題曲", 1872 | "link": "https://www.youtube.com/watch?v=0rp3pP2Xwhs" 1873 | }, 1874 | { 1875 | "title": "命に嫌われている。/ カンザキイオリ(Covered by コバソロ & 相沢)", 1876 | "link": "https://www.youtube.com/watch?v=FR91CB5SBWU" 1877 | }, 1878 | { 1879 | "title": "黃鴻升 Alien Huang【地球上最浪漫的一首歌】Official Music Video", 1880 | "link": "https://www.youtube.com/watch?v=bCB_nIdN86s" 1881 | }, 1882 | { 1883 | "title": "怕胖團PAPUN BAND 《 魚 》Music Video", 1884 | "link": "https://www.youtube.com/watch?v=Dnz-BTz9eDU" 1885 | }, 1886 | { 1887 | "title": "玖壹壹-夢醒時分Remix", 1888 | "link": "https://www.youtube.com/watch?v=ZXF4-mQijF4" 1889 | }, 1890 | { 1891 | "title": "玖壹壹-再會中港路", 1892 | "link": "https://www.youtube.com/watch?v=lgLF1eMF-zI" 1893 | }, 1894 | { 1895 | "title": "玖壹壹-妳不愛我(ft.洋蔥他爸)", 1896 | "link": "https://www.youtube.com/watch?v=Ou92wShJaAU" 1897 | }, 1898 | { 1899 | "title": "玖壹壹-我的路", 1900 | "link": "https://www.youtube.com/watch?v=mNMH7SLGDOw" 1901 | }, 1902 | { 1903 | "title": "Red Bull Vol. - E.SO Outta Body 線上演唱會", 1904 | "link": "https://www.youtube.com/watch?v=juBDM5f2N9E" 1905 | }, 1906 | { 1907 | "title": "謝和弦 R-chord – 就是在講你喔 Talking about you (Official Music Video)", 1908 | "link": "https://www.youtube.com/watch?v=UOUWlicRSEI" 1909 | }, 1910 | { 1911 | "title": "【纯享】单依纯 《你就不要想起我》,悲伤情歌唱到心碎 | 214小红书独爱之夜 | 阿肆/陈粒/达达乐队/黄龄/黄明昊/胡夏/靳海音/焦迈奇/梁博/李荣浩/毛不易 | 优酷 YOUKU", 1912 | "link": "https://www.youtube.com/watch?v=SRy1qDusFoU" 1913 | }, 1914 | { 1915 | "title": "李浩瑋 Howard Lee【Crush On(Acoustic Version)】Audio Video(4K)", 1916 | "link": "https://www.youtube.com/watch?v=HgNZ5WYni5Y" 1917 | }, 1918 | { 1919 | "title": "《阿拉斯加海湾》菲道尔 COVER BY 陈颖恩", 1920 | "link": "https://www.youtube.com/watch?v=JhIan9zvuyE" 1921 | }, 1922 | { 1923 | "title": "采子 Cai Zi 「光害」 ’Shining Lights‘ Official MV'", 1924 | "link": "https://www.youtube.com/watch?v=l4pWgb-626A" 1925 | }, 1926 | { 1927 | "title": "《約定的夢幻島》真人版電影推廣曲-正しく ない(Can't Be Right) 原唱:ずっと真夜中でいいのに 中日羅字幕", 1928 | "link": "https://www.youtube.com/watch?v=gdKrwTEbHOU" 1929 | }, 1930 | { 1931 | "title": "傲七爷 - 是想你的声音啊「你快听滴答滴滴答滴滴答滴,是雨滴的声音」【動態歌詞/Lyrics Video】", 1932 | "link": "https://www.youtube.com/watch?v=TcFl0jQCJmg" 1933 | }, 1934 | { 1935 | "title": "謝和弦 R-chord –【Let It Be】就讓她去 (Official Music Video)", 1936 | "link": "https://www.youtube.com/watch?v=ngNemwBrzcE" 1937 | }, 1938 | { 1939 | "title": "艾辰 - 錯位時空「我吹過你吹過的晚風,那我們算不算 相擁」【動態歌詞/pīn yīn gē cí】", 1940 | "link": "https://www.youtube.com/watch?v=gC7pUSI5UeA" 1941 | }, 1942 | { 1943 | "title": "周杰倫 Jay Chou【稻香 Rice Field】-Official Music Video", 1944 | "link": "https://www.youtube.com/watch?v=sHD_z90ZKV0" 1945 | }, 1946 | { 1947 | "title": "雪二 - 漸冷『你能不能再愛我一遍,像以前 以前你都是熱烈。』【動態歌詞Lyrics】", 1948 | "link": "https://www.youtube.com/watch?v=Jq_-U23oJV4" 1949 | }, 1950 | { 1951 | "title": "持修 根本不是我對手 歌詞", 1952 | "link": "https://www.youtube.com/watch?v=z2JjpCijgpk" 1953 | }, 1954 | { 1955 | "title": "徐佳瑩 LaLa【到此為止 From Now On】Official Music Video", 1956 | "link": "https://www.youtube.com/watch?v=T7IK_5XCRiU" 1957 | }, 1958 | { 1959 | "title": "謎路人Way of Puzzle - 只記得你曾經存在 [Official Music Video]", 1960 | "link": "https://www.youtube.com/watch?v=fRJohcv82oY" 1961 | }, 1962 | { 1963 | "title": "艾怡良 Eve Ai《Forever Young》Official Music Video", 1964 | "link": "https://www.youtube.com/watch?v=rFj6azCUYrU" 1965 | }, 1966 | { 1967 | "title": "ChihSiou 持修 [ 正想著你呢 ] Official Music Video", 1968 | "link": "https://www.youtube.com/watch?v=FBp4QhLqiKs" 1969 | }, 1970 | { 1971 | "title": "「炎 -LiSA」鬼滅之刃:劇場版 無限列車篇主題曲 ED Full 【中日歌詞】", 1972 | "link": "https://www.youtube.com/watch?v=iTW1bv2eO9Y" 1973 | }, 1974 | { 1975 | "title": "一首超好聽的英文歌 《Umbrella》開口即跪 一秒淪陷", 1976 | "link": "https://www.youtube.com/watch?v=CEE5ZRpF1ok" 1977 | }, 1978 | { 1979 | "title": "[avex官方HD] 盧子杰 James Lu – 14 (Feat. 屁孩Ryan & 柯政宏) 官方歌詞版MV", 1980 | "link": "https://www.youtube.com/watch?v=U7jPKichHiQ" 1981 | }, 1982 | { 1983 | "title": "珂拉琪 Collage/這該死的拘執佮愛", 1984 | "link": "https://www.youtube.com/watch?v=5h_mxY1At7E" 1985 | }, 1986 | { 1987 | "title": "珂拉琪 Collage/萬千花蕊慈母悲哀", 1988 | "link": "https://www.youtube.com/watch?v=kkUWlcjmOew" 1989 | }, 1990 | { 1991 | "title": "XMASwu - 故意 「我不是故意的,是真的想你了。」♪ Karendaidai ♪", 1992 | "link": "https://www.youtube.com/watch?v=8sNxaqiyP78" 1993 | }, 1994 | { 1995 | "title": "周杰倫 - 爸.我回來了", 1996 | "link": "https://www.youtube.com/watch?v=0p6pNWxpCKw" 1997 | }, 1998 | { 1999 | "title": "洛塵鞅_vvv-最後一頁『想把你抱进身体里面』【動態歌詞Lyrics】", 2000 | "link": "https://www.youtube.com/watch?v=dXZw0YfHJxU" 2001 | }, 2002 | { 2003 | "title": "【Playlist】 Rapper说情话30首", 2004 | "link": "https://www.youtube.com/watch?v=ZTIZrdvESE4" 2005 | }, 2006 | { 2007 | "title": "李佳隆 x 孟子坤 《世界末日》 ☄️☄️☄️ DOOMS DAY 【 OFFICIAL MV 】", 2008 | "link": "https://www.youtube.com/watch?v=wtz0I80V2mM" 2009 | }, 2010 | { 2011 | "title": "Why You So Beautiful - TIAB", 2012 | "link": "https://www.youtube.com/watch?v=b2_wnedY2OY" 2013 | }, 2014 | { 2015 | "title": "TYSON YOSHI & MADBOII - I Don't Give A Part II (Official Music Video)", 2016 | "link": "https://www.youtube.com/watch?v=rnRCVBU46S4" 2017 | }, 2018 | { 2019 | "title": "❤【最怕rapper唱情歌 】1小时說唱情歌歌單|聽完的人都想戀愛|Chill Rap Playlist|高爾宣 OSN 派偉俊 Tyson Yoshi Marz23【無廣告高音質】", 2020 | "link": "https://www.youtube.com/watch?v=cKNJtwdH-KY" 2021 | }, 2022 | { 2023 | "title": "華晨宇【好想愛這個世界啊】Cover(蔡恩雨 Priscilla Abby)", 2024 | "link": "https://www.youtube.com/watch?v=-vnfi9cGltA" 2025 | }, 2026 | { 2027 | "title": "《中國新說唱2020》純享:BrantB白景屹&Kyra Z《冷血》", 2028 | "link": "https://www.youtube.com/watch?v=YrnLP9Dd-Pg" 2029 | }, 2030 | { 2031 | "title": "飛鳥和蟬- 任然 Cover ( 蔡恩雨 Priscilla Abby)", 2032 | "link": "https://www.youtube.com/watch?v=1BBw4oyOMG0" 2033 | }, 2034 | { 2035 | "title": "《中國新說唱2020》純享:王齊銘《義無反顧》 表達對母親的思念|愛奇藝", 2036 | "link": "https://www.youtube.com/watch?v=T6oSXtBAegA" 2037 | }, 2038 | { 2039 | "title": "采子 Cai Zi 「美夢」 ’You Were My Dream ‘ Official MV", 2040 | "link": "https://www.youtube.com/watch?v=kqTu5Vy9Upg" 2041 | }, 2042 | { 2043 | "title": "王以太|童言无忌", 2044 | "link": "https://www.youtube.com/watch?v=eEs0iNb2xug" 2045 | }, 2046 | { 2047 | "title": "《中國新說唱2020》純享:KAFE HU《經濟艙》喜歡被簇擁的感覺|愛奇藝", 2048 | "link": "https://www.youtube.com/watch?v=X8COjmk4Jkg" 2049 | }, 2050 | { 2051 | "title": "【 中国新说唱2019 】Key.L 刘聪 - Hey Kong", 2052 | "link": "https://www.youtube.com/watch?v=STODbJ_fDdw" 2053 | }, 2054 | { 2055 | "title": "王靖雯不胖 - 不知所措【動態歌詞】「最燦爛的煙火總是先墜落 越是暖的經過反而越折磨」♪", 2056 | "link": "https://www.youtube.com/watch?v=PBRW0GY6bfY" 2057 | }, 2058 | { 2059 | "title": "周杰倫 Jay Chou【最後的戰役 The Final Battle】Official MV", 2060 | "link": "https://www.youtube.com/watch?v=ZcShYmOhHM0" 2061 | }, 2062 | { 2063 | "title": "《中國新說唱2020》純享:GALI《珍珠幻象》實名diss節目組?|愛奇藝", 2064 | "link": "https://www.youtube.com/watch?v=imZN5KhfFHA" 2065 | }, 2066 | { 2067 | "title": "dance flow - 迷人的危险【为什麼最迷人的最危险 为什麼爱会让人变残缺】", 2068 | "link": "https://www.youtube.com/watch?v=04iSgtR7hqw" 2069 | }, 2070 | { 2071 | "title": "PG One - \"Talk Too Much\" Official MV", 2072 | "link": "https://www.youtube.com/watch?v=tvx1tzB3Mpo" 2073 | }, 2074 | { 2075 | "title": "《中國新說唱2020》純享:王齊銘《千翻兒》送给曾经迷茫掙扎過的野孩子", 2076 | "link": "https://www.youtube.com/watch?v=7QCB_EP18E0" 2077 | }, 2078 | { 2079 | "title": "🍖王齐铭 WATCH ME 🍖《千翻儿》GO$H MUSIC [ OFFICIAL MUSIC VIDEO ]", 2080 | "link": "https://www.youtube.com/watch?v=4Xaxmoo4gJA" 2081 | }, 2082 | { 2083 | "title": "李榮浩 Ronghao Li《麻雀 Sparrow》Official Music Video", 2084 | "link": "https://www.youtube.com/watch?v=2l4x_TvBKiw" 2085 | }, 2086 | { 2087 | "title": "【麻雀】---李榮浩 (動態歌詞Lyrics) ♫你飛向了雪山之巔,我留在你回憶裏面,你成仙我替你留守人間,麻雀也有明天♫#高音質#", 2088 | "link": "https://www.youtube.com/watch?v=2oPqhqqSQQE" 2089 | }, 2090 | { 2091 | "title": "李浩瑋 Howard Lee - 窩囊廢 Loser", 2092 | "link": "https://www.youtube.com/watch?v=XD9VYyEAws8" 2093 | }, 2094 | { 2095 | "title": "Marz23 -【我不是饒舌歌手 Not A Rapper】Official Music Video", 2096 | "link": "https://www.youtube.com/watch?v=lR6zkQln6Ew" 2097 | }, 2098 | { 2099 | "title": "あいみょん – さよならの今日に【OFFICIAL MUSIC VIDEO】", 2100 | "link": "https://www.youtube.com/watch?v=C1yP_GQ9s4E" 2101 | }, 2102 | { 2103 | "title": "T. Shan - Protecta (Official Lyric Video)", 2104 | "link": "https://www.youtube.com/watch?v=2Tl78i8t6VM" 2105 | }, 2106 | { 2107 | "title": "【女性が歌う】別の人の彼女になったよ/wacci (Covered by あさぎーにょ)", 2108 | "link": "https://www.youtube.com/watch?v=S4Vvy8h1CTA" 2109 | }, 2110 | { 2111 | "title": "あいみょん『強がりました』×『偽コイ同盟』リリックムービー", 2112 | "link": "https://www.youtube.com/watch?v=_1WLfHWBRio" 2113 | }, 2114 | { 2115 | "title": "あいみょん「どうせ死ぬなら」(Official Video)", 2116 | "link": "https://www.youtube.com/watch?v=Qetpdg4C1IY" 2117 | }, 2118 | { 2119 | "title": "あいみょん - 君はロックを聴かない 【OFFICIAL MUSIC VIDEO】", 2120 | "link": "https://www.youtube.com/watch?v=ARwVe1MYAUA" 2121 | }, 2122 | { 2123 | "title": "莫宰羊 - 未接來電 missed call * M/V ***", 2124 | "link": "https://www.youtube.com/watch?v=NXId3_EEGKY" 2125 | }, 2126 | { 2127 | "title": "莫宰羊 - 健康快樂 Health & Happiness * M/V ***", 2128 | "link": "https://www.youtube.com/watch?v=SfehQq0wC84" 2129 | }, 2130 | { 2131 | "title": "莫宰羊 - 國王 King (Cypher) ft. Asiaboy & Lizi & Gambler ***", 2132 | "link": "https://www.youtube.com/watch?v=GOfJsuGOZow" 2133 | }, 2134 | { 2135 | "title": "ヨルシカ - 花に亡霊(OFFICIAL VIDEO)", 2136 | "link": "https://www.youtube.com/watch?v=9lVPAWLWtWc" 2137 | }, 2138 | { 2139 | "title": "药水哥 - 药水歌「我出门总是带着五瓶药水,手中的卡牌不停切换到位」【動態歌詞/Lyrics Video】", 2140 | "link": "https://www.youtube.com/watch?v=Kx9y-moNx0c" 2141 | }, 2142 | { 2143 | "title": "I Like You So Much, You’ll Know It (我多喜欢你, 你会知道 English) - A Love So Beautiful OST [VALERIE POLA]", 2144 | "link": "https://www.youtube.com/watch?v=UgiuRwn8JeI" 2145 | }, 2146 | { 2147 | "title": "Counting Stars - OneRepublic | Alex Goot, Chrissy Costanza, KHS", 2148 | "link": "https://www.youtube.com/watch?v=cSLAO7zxS2M" 2149 | }, 2150 | { 2151 | "title": "Maejor - Gone 「這樣告白很好聽」♪ Karendaidai ♪", 2152 | "link": "https://www.youtube.com/watch?v=an8MfhX0tIA" 2153 | }, 2154 | { 2155 | "title": "Morrison馬仕釗- I Still Think About It (Official Music Video)", 2156 | "link": "https://www.youtube.com/watch?v=SEgVZLQ0m9g" 2157 | }, 2158 | { 2159 | "title": "采子 Cai Zi 「油漆」 ’Paint‘ Official MV'", 2160 | "link": "https://www.youtube.com/watch?v=WQCBjvBD1Ik" 2161 | }, 2162 | { 2163 | "title": "Morrison馬仕釗- Oh Ma California (Official Music Video)", 2164 | "link": "https://www.youtube.com/watch?v=hgwhCXs3JwQ" 2165 | }, 2166 | { 2167 | "title": "謝和弦 R-chord -【一世人一個名】最新台語創作 官方音檔", 2168 | "link": "https://www.youtube.com/watch?v=vlTKpaTvTRA" 2169 | }, 2170 | { 2171 | "title": "謝和弦 R-chord -【台灣的歌】Song of taiwan Feat.桑布伊 (Official Music Video)", 2172 | "link": "https://www.youtube.com/watch?v=HDZD-LICuV8" 2173 | }, 2174 | { 2175 | "title": "Dramma MnMnMn tiktok song", 2176 | "link": "https://www.youtube.com/watch?v=LuQdLqTIVBw" 2177 | }, 2178 | { 2179 | "title": "Marz23 -【陪你失敗Fail With You】ft. 寺二 (Official Video)", 2180 | "link": "https://www.youtube.com/watch?v=djSEDGoqUzo" 2181 | }, 2182 | { 2183 | "title": "Mayday五月天 [ 好好 (想把你寫成一首歌) Song About You ] Official Music Video", 2184 | "link": "https://www.youtube.com/watch?v=HxIct0i-CcA" 2185 | }, 2186 | { 2187 | "title": "CosmosPeople宇宙人 [ 如果我們還在一起 What If We ] Official Music Video", 2188 | "link": "https://www.youtube.com/watch?v=mBB_67OxXIo" 2189 | }, 2190 | { 2191 | "title": "Mayday五月天 [ 我不願讓你一個人I Won't Let You Be Lonely ] Official Music Video - 末日版", 2192 | "link": "https://www.youtube.com/watch?v=38lcQsEMGrk" 2193 | }, 2194 | { 2195 | "title": "Mayday五月天 [ 溫柔 ] Official Music Video", 2196 | "link": "https://www.youtube.com/watch?v=mtAc_bMYBsM" 2197 | }, 2198 | { 2199 | "title": "《你深海般的藍色》William Black - Deep Blue Lyrics ft Monika Santucci 英繁中字🎶", 2200 | "link": "https://www.youtube.com/watch?v=ZPXbI92GBfo" 2201 | }, 2202 | { 2203 | "title": "Justin Bieber - Sorry (PURPOSE : The Movement)", 2204 | "link": "https://www.youtube.com/watch?v=fRh_vgS2dFE" 2205 | }, 2206 | { 2207 | "title": "[Vocal Cover] IN SILENCE by Janet Suhh (자넷서) - 사이코지만 괜찮아 It's Okay to Not Be Okay OST", 2208 | "link": "https://www.youtube.com/watch?v=j8Tk-b_Uz1k" 2209 | }, 2210 | { 2211 | "title": "【動態歌詞】世界這麼大還是遇見你(清新的小女孩(中文版))—程響『世界這麼大還是遇見你 多少次瘋狂多少天真』", 2212 | "link": "https://www.youtube.com/watch?v=wRmedql89Ro" 2213 | }, 2214 | { 2215 | "title": "顏人中- 好喜歡你【動態歌詞/Lyrics Video】", 2216 | "link": "https://www.youtube.com/watch?v=XXpH8ukCf3I" 2217 | }, 2218 | { 2219 | "title": "程jiajia (程佳佳) - 我爱你【動態歌詞/Lyrics Video】", 2220 | "link": "https://www.youtube.com/watch?v=HGeHRyXBrnE" 2221 | }, 2222 | { 2223 | "title": "暗裡著迷", 2224 | "link": "https://www.youtube.com/watch?v=InawYZVNwC4" 2225 | }, 2226 | { 2227 | "title": "胡66 - 後來遇見他【動態歌詞/Lyrics Video】", 2228 | "link": "https://www.youtube.com/watch?v=g1-wpy5BL1U" 2229 | }, 2230 | { 2231 | "title": "隔壁老樊 - 失樂【動態歌詞Lyrics】『你走的時候請你別帶走,我的快樂。』", 2232 | "link": "https://www.youtube.com/watch?v=CgUKT-XEI50" 2233 | }, 2234 | { 2235 | "title": "【新版】F*yy Cover - 萬有引力【原唱:汪蘇瀧】【動態歌詞】♪", 2236 | "link": "https://www.youtube.com/watch?v=rUt5gnQjj04" 2237 | }, 2238 | { 2239 | "title": "蜡笔小心 - MOM【動態歌詞/Lyrics Video】", 2240 | "link": "https://www.youtube.com/watch?v=othQVXxFd6I" 2241 | }, 2242 | { 2243 | "title": "火羊瞌睡了 - 夏天的风【動態歌詞/Lyrics Video】", 2244 | "link": "https://www.youtube.com/watch?v=hN7hpdQWS1E" 2245 | }, 2246 | { 2247 | "title": "Sketch Plane - Cam Kelley", 2248 | "link": "https://www.youtube.com/watch?v=Lndp_X-nar4" 2249 | }, 2250 | { 2251 | "title": "Eric周興哲《其實你並沒那麼孤單 You Are Not Alone》Official Music Video", 2252 | "link": "https://www.youtube.com/watch?v=YB6g7HtJmvY" 2253 | }, 2254 | { 2255 | "title": "TRASH《重感情的廢物 Heavyhearted Loser》Official Music Video", 2256 | "link": "https://www.youtube.com/watch?v=jM3HXNusWA0" 2257 | }, 2258 | { 2259 | "title": "NARUTO - Sadness and Sorrow 哀と悲 - Ru's Piano", 2260 | "link": "https://www.youtube.com/watch?v=RLv-XocB6-I" 2261 | }, 2262 | { 2263 | "title": "五月天 Mayday【倔強 Stubborn】Official Music Video", 2264 | "link": "https://www.youtube.com/watch?v=R2s-H_crYkc" 2265 | }, 2266 | { 2267 | "title": "阿冗 - 與我無關【動態歌詞】「望眼欲穿 等不到你的晚安」♪", 2268 | "link": "https://www.youtube.com/watch?v=8tuzFSXeKI0" 2269 | }, 2270 | { 2271 | "title": "Corki - 下墜Falling『喝醉後的夢裡,我往前 你退後。』【動態歌詞Lyrics】", 2272 | "link": "https://www.youtube.com/watch?v=-M4CUPBH5bg" 2273 | }, 2274 | { 2275 | "title": "夢然 (Mira) - 少年 『我還是從前那個少年 沒有一絲絲改變』【動態歌詞】", 2276 | "link": "https://www.youtube.com/watch?v=LGzDEu7Sh5g" 2277 | }, 2278 | { 2279 | "title": "[MV] K.will(케이윌) - Talk Love(말해! 뭐해?) l Descendants of the Sun 태양의 후예 OST", 2280 | "link": "https://www.youtube.com/watch?v=SdHQkkRc-hc" 2281 | }, 2282 | { 2283 | "title": "瘦子E.SO【太陽 When The Cloudless Day Comes】Lyric Video", 2284 | "link": "https://www.youtube.com/watch?v=C8R7qkxno-4" 2285 | }, 2286 | { 2287 | "title": "Twinbed - Trouble I'm in (Lyrics)", 2288 | "link": "https://www.youtube.com/watch?v=OvW63QsIxts" 2289 | }, 2290 | { 2291 | "title": "TRASH《重感情的廢物 Heavyhearted Loser》Live Session #1", 2292 | "link": "https://www.youtube.com/watch?v=xAVcUwORtP0" 2293 | }, 2294 | { 2295 | "title": "INHON胤宏 X HowZ【Burning】(Official Music Video )", 2296 | "link": "https://www.youtube.com/watch?v=2R666UEZ0kg" 2297 | }, 2298 | { 2299 | "title": "J.Sheon - Off You Go 慢走不送 ft. 艾怡良 & Morrison馬仕釗 (Official Music Video)", 2300 | "link": "https://www.youtube.com/watch?v=7Y4k1fDIVjs" 2301 | }, 2302 | { 2303 | "title": "aMEI張惠妹 feat. 艾怡良、徐佳瑩 [ 傲嬌Catfight ] Official Music Video", 2304 | "link": "https://www.youtube.com/watch?v=-x5odUXWjFk" 2305 | }, 2306 | { 2307 | "title": "【高清繁中MV】LeeSsang - 不能分手的女人 不能離開的男人", 2308 | "link": "https://www.youtube.com/watch?v=B1OE45aXLH4" 2309 | }, 2310 | { 2311 | "title": "【RU Cover Channel】2019年度最受歡迎十大歌曲", 2312 | "link": "https://www.youtube.com/watch?v=fwei8E6DcBA" 2313 | }, 2314 | { 2315 | "title": "徐佳瑩 LaLa【尋人啟事】[HD]Official Music Video", 2316 | "link": "https://www.youtube.com/watch?v=TPzyzi-Jydc" 2317 | }, 2318 | { 2319 | "title": "( 歌詞 ) 劉力揚 - 禮物", 2320 | "link": "https://www.youtube.com/watch?v=TnOHGv-UKL4" 2321 | }, 2322 | { 2323 | "title": "東城衛x謝和弦 D C W&R Chord 夠愛歌詞", 2324 | "link": "https://www.youtube.com/watch?v=uujgulVxsRk" 2325 | }, 2326 | { 2327 | "title": "Sound Of Walking Away X Divinity X Shelter (Music Video)", 2328 | "link": "https://www.youtube.com/watch?v=5aduiLwOb70" 2329 | }, 2330 | { 2331 | "title": "SHY Martin - can I call you back? (Lyric Video)", 2332 | "link": "https://www.youtube.com/watch?v=hvHGIexi0Lo" 2333 | }, 2334 | { 2335 | "title": "♫ Relaxing Piano Instrumental ♫ White Star Snow (Album: Alone In Fantasy)", 2336 | "link": "https://www.youtube.com/watch?v=skAXle_YVxo" 2337 | }, 2338 | { 2339 | "title": "SoulJa×中村舞子 - What's your name - collaboration with 壇蜜", 2340 | "link": "https://www.youtube.com/watch?v=srAWwMnOYBE" 2341 | }, 2342 | { 2343 | "title": "J.Sheon - Don't Ask 別問很可怕 (Official Music Video)", 2344 | "link": "https://www.youtube.com/watch?v=tRa3fOlnN7k" 2345 | }, 2346 | { 2347 | "title": "Danny Avila - End Of The Night ‖抖音熱門卡點音樂 TIK TOK 【中英字幕Lyrics】", 2348 | "link": "https://www.youtube.com/watch?v=YF0uCC8Dqxc" 2349 | }, 2350 | { 2351 | "title": "【抖音/tiktok】《Wonderful U》抖音上很受欢迎的英文歌曲『中文翻译』", 2352 | "link": "https://www.youtube.com/watch?v=zgMxEmfSo9k" 2353 | }, 2354 | { 2355 | "title": "[Vietsub/Pinyin] Thất Phu Sơn Quỷ (匹夫山鬼) - Khô Dã Band (枯野乐队)", 2356 | "link": "https://www.youtube.com/watch?v=DKafjEII3MU" 2357 | }, 2358 | { 2359 | "title": "夏婉安 - 習慣『最怕沒有結果的拉扯....』【動態歌詞Lyrics】", 2360 | "link": "https://www.youtube.com/watch?v=P2DRc-94INo" 2361 | } 2362 | ] -------------------------------------------------------------------------------- /img/2023-10-25-10-00-59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2023-10-25-10-00-59.png -------------------------------------------------------------------------------- /img/2023-10-25-10-01-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2023-10-25-10-01-21.png -------------------------------------------------------------------------------- /img/2023-10-25-10-03-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2023-10-25-10-03-47.png -------------------------------------------------------------------------------- /img/2023-10-27-10-09-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2023-10-27-10-09-17.png -------------------------------------------------------------------------------- /img/2023-11-02-10-00-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2023-11-02-10-00-32.png -------------------------------------------------------------------------------- /img/2023-11-03-14-44-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2023-11-03-14-44-41.png -------------------------------------------------------------------------------- /img/2023-12-08-16-03-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2023-12-08-16-03-28.png -------------------------------------------------------------------------------- /img/2024-05-15-14-03-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2024-05-15-14-03-09.png -------------------------------------------------------------------------------- /img/2024-05-17-15-08-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/img/2024-05-17-15-08-12.png -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import uvicorn 4 | from fastapi import FastAPI 5 | from fastapi.responses import JSONResponse 6 | from fastapi.templating import Jinja2Templates 7 | 8 | from chatgpt_linebot.urls import line_app 9 | 10 | app = FastAPI() 11 | 12 | templates = Jinja2Templates(directory="templates") 13 | 14 | app.include_router(line_app) 15 | 16 | 17 | @app.get("/", response_class=JSONResponse) 18 | async def home() -> JSONResponse: 19 | """Home Page 20 | 21 | Returns: 22 | JSONResponse: Hello World! 23 | """ 24 | message = {"stauts": "success", "message": "Hello World!"} 25 | return JSONResponse(content=message) 26 | 27 | 28 | if __name__ == "__main__": 29 | # Local WSGI: Uvicorn 30 | port = int(os.getenv("PORT", 8090)) 31 | uvicorn.run( 32 | "main:app", 33 | host="0.0.0.0", 34 | port=port, 35 | workers=4, 36 | log_level="info", 37 | access_log=True, 38 | use_colors=True, 39 | reload=True, 40 | ) 41 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "chatgpt-line-bot" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["hs_junxiang "] 6 | readme = "README.md" 7 | # packages = [{include = "chatgpt_line_bot"}] # replit 8 | 9 | [tool.poetry.dependencies] 10 | python = "^3.8" 11 | uvicorn = "^0.23.2" 12 | fastapi = "^0.104.0" 13 | g4f = "*" 14 | line-bot-sdk = "^3.5.0" 15 | requests = "^2.31.0" 16 | bs4 = "^0.0.1" 17 | icrawler = "^0.6.7" 18 | python-dotenv = "^1.0.0" 19 | nest_asyncio = "*" 20 | pillow = "*" 21 | jinja2 = "*" 22 | lxml = "^5.2.2" 23 | serpapi = "^0.1.5" 24 | google-search-results = "^2.4.2" 25 | cloudscraper = "^1.2.71" 26 | 27 | [build-system] 28 | requires = ["poetry-core"] 29 | build-backend = "poetry.core.masonry.api" 30 | -------------------------------------------------------------------------------- /static/images/2025-01-02-10-18-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/static/images/2025-01-02-10-18-10.png -------------------------------------------------------------------------------- /static/images/2025-02-11-16-16-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/static/images/2025-02-11-16-16-27.png -------------------------------------------------------------------------------- /static/images/2025-02-11-16-26-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/static/images/2025-02-11-16-26-05.png -------------------------------------------------------------------------------- /static/images/2025-02-11-17-27-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lin-jun-xiang/chatgpt-line-bot/85b0f304c4368a42ded5fffa752cb4e2764598cb/static/images/2025-02-11-17-27-24.png --------------------------------------------------------------------------------