|
|
@@ -13,8 +13,8 @@
|
|
|
[](https://github.com/sansan0/TrendRadar/stargazers)
|
|
|
[](https://github.com/sansan0/TrendRadar/network/members)
|
|
|
[](LICENSE)
|
|
|
-[](https://github.com/sansan0/TrendRadar)
|
|
|
-[](https://github.com/sansan0/TrendRadar)
|
|
|
+[](https://github.com/sansan0/TrendRadar)
|
|
|
+[](https://github.com/sansan0/TrendRadar)
|
|
|
[](https://github.com/sansan0/TrendRadar)
|
|
|
|
|
|
[](https://work.weixin.qq.com/)
|
|
|
@@ -135,6 +135,14 @@ After communication, the author indicated no concerns about server pressure, but
|
|
|
>**📌 Check Latest Updates**: **[Original Repository Changelog](https://github.com/sansan0/TrendRadar?tab=readme-ov-file#-changelog)**:
|
|
|
- **Tip**: Check [Changelog] to understand specific [Features]
|
|
|
|
|
|
+### 2026/01/02 - v4.7.0
|
|
|
+
|
|
|
+- **Fix RSS HTML Display**: Fixed RSS data format mismatch causing rendering issues, now displays correctly grouped by keyword
|
|
|
+- **New Regex Syntax**: Keyword config supports `/pattern/` regex syntax, solves English substring mismatch issues (e.g., `ai` matching `training`) [📖 View Syntax Details](#keyword-basic-syntax)
|
|
|
+- **New Display Name Syntax**: Use `=> alias` to give complex regex a friendly name, cleaner push notifications (e.g., `/\bai\b/ => AI Related`)
|
|
|
+- **Can't Write Regex?** README now includes AI prompt guide - just tell ChatGPT/Claude/DeepSeek what you want to match
|
|
|
+
|
|
|
+
|
|
|
### 2026/01/01 - v4.6.0
|
|
|
|
|
|
- **Fix RSS HTML Display**: Merged RSS content into trending HTML page, grouped by source
|
|
|
@@ -740,12 +748,14 @@ rss:
|
|
|
|
|
|
Set personal keywords (e.g., AI, BYD, Education Policy) to receive only relevant trending news, filtering out noise.
|
|
|
|
|
|
-**Basic Syntax** (5 types):
|
|
|
+**Basic Syntax** (7 types):
|
|
|
- Normal words: Basic matching
|
|
|
- Required words `+`: Narrow scope
|
|
|
- Filter words `!`: Exclude noise
|
|
|
- Count limit `@`: Control display count (v3.2.0 new)
|
|
|
- Global filter `[GLOBAL_FILTER]`: Globally exclude specified content (v3.5.0 new)
|
|
|
+- Regex `/pattern/`: Precise pattern matching (v4.7.0 new)
|
|
|
+- Display name `=> alias`: Custom display text (v4.7.0 new)
|
|
|
|
|
|
**Advanced Features** (v3.2.0 new):
|
|
|
- 🔢 **Keyword Sorting Control**: Sort by popularity or config order
|
|
|
@@ -1190,6 +1200,7 @@ Method 1 discovered and suggested by **ziventian**, thanks to them. Default is p
|
|
|
| **189 Mail** | 189.cn | smtp.189.cn | 465 | SSL |
|
|
|
| **Aliyun Mail** | aliyun.com | smtp.aliyun.com | 465 | TLS |
|
|
|
| **Yandex Mail** | yandex.com | smtp.yandex.com | 465 | TLS |
|
|
|
+| **iCloud Mail** | icloud.com | smtp.mail.me.com | 587 | SSL |
|
|
|
|
|
|
> **Auto-detect**: When using above emails, no need to manually configure `EMAIL_SMTP_SERVER` and `EMAIL_SMTP_PORT`, system auto-detects.
|
|
|
>
|
|
|
@@ -1201,6 +1212,7 @@ Method 1 discovered and suggested by **ziventian**, thanks to them. Default is p
|
|
|
> - Thanks to [@DYZYD](https://github.com/DYZYD) for contributing 189 Mail (189.cn) configuration and completing self-send-receive testing ([#291](https://github.com/sansan0/TrendRadar/issues/291))
|
|
|
> - Thanks to [@longzhenren](https://github.com/longzhenren) for contributing Aliyun Mail (aliyun.com) configuration and completing testing ([#344](https://github.com/sansan0/TrendRadar/issues/344))
|
|
|
> - Thanks to [@ACANX](https://github.com/ACANX) for contributing Yandex Mail (yandex.com) configuration and completing testing ([#663](https://github.com/sansan0/TrendRadar/issues/663))
|
|
|
+> - Thanks to [@Sleepy-Tianhao](https://github.com/Sleepy-Tianhao) for contributing iCloud Mail (icloud.com) configuration and completing testing ([#728](https://github.com/sansan0/TrendRadar/issues/728))
|
|
|
|
|
|
**Common Email Settings:**
|
|
|
|
|
|
@@ -1697,7 +1709,7 @@ platforms:
|
|
|
|
|
|
**Configuration Location:** `config/frequency_words.txt`
|
|
|
|
|
|
-Configure monitoring keywords in `frequency_words.txt` with five syntax types, region markers, and grouping features.
|
|
|
+Configure monitoring keywords in `frequency_words.txt` with seven syntax types, region markers, and grouping features.
|
|
|
|
|
|
| Syntax Type | Symbol | Purpose | Example | Matching Logic |
|
|
|
|------------|--------|---------|---------|----------------|
|
|
|
@@ -1706,6 +1718,8 @@ Configure monitoring keywords in `frequency_words.txt` with five syntax types, r
|
|
|
| **Filter** | `!` | Noise exclusion | `!ad` | Exclude if included |
|
|
|
| **Count Limit** | `@` | Control display count | `@10` | Max 10 news (v3.2.0 new) |
|
|
|
| **Global Filter** | `[GLOBAL_FILTER]` | Globally exclude content | See example below | Filter under any circumstances (v3.5.0 new) |
|
|
|
+| **Regex** | `/pattern/` | Precise matching | `/\bai\b/` | Match using regex (v4.7.0 new) |
|
|
|
+| **Display Name** | `=> alias` | Custom display text | `/\bai\b/ => AI Related` | Show alias in push/HTML (v4.7.0 new) |
|
|
|
|
|
|
#### 2.1 Basic Syntax
|
|
|
|
|
|
@@ -1799,6 +1813,105 @@ AI
|
|
|
- Recommended to keep global filter words under 5-15
|
|
|
- For group-specific filtering, prioritize using group filter words (`!` prefix)
|
|
|
|
|
|
+##### 6. **Regex** `/pattern/` - Precise Matching (v4.7.0 new)
|
|
|
+
|
|
|
+Normal keywords use substring matching, which is convenient for Chinese but may cause false matches in English. For example, `ai` would match the `ai` in `training`.
|
|
|
+
|
|
|
+Use regex syntax `/pattern/` to achieve precise matching:
|
|
|
+
|
|
|
+```txt
|
|
|
+/(?<![a-z])ai(?![a-z])/
|
|
|
+artificial intelligence
|
|
|
+```
|
|
|
+
|
|
|
+**Effect:** Match using regular expressions, supports all Python regex syntax
|
|
|
+
|
|
|
+**Common Regex Patterns:**
|
|
|
+
|
|
|
+| Need | Regex | Description |
|
|
|
+|------|-------|-------------|
|
|
|
+| Word boundary | `/\bword\b/` | Match standalone word, e.g., `/\bai\b/` matches "AI" but not "training" |
|
|
|
+| Non-letter boundary | `/(?<![a-z])ai(?![a-z])/` | Looser boundary, suitable for mixed Chinese-English |
|
|
|
+| Start match | `/^breaking/` | Only match titles starting with "breaking" |
|
|
|
+| End match | `/release$/` | Only match titles ending with "release" |
|
|
|
+| Multiple options | `/apple\|huawei\|xiaomi/` | Match any one (note escaped `\|`) |
|
|
|
+
|
|
|
+**Matching Examples:**
|
|
|
+```txt
|
|
|
+# Config
|
|
|
+/(?<![a-z])ai(?![a-z])/
|
|
|
+artificial intelligence
|
|
|
+```
|
|
|
+
|
|
|
+- ✅ "AI is the future" ← Matches standalone "AI"
|
|
|
+- ✅ "Hello ai here" ← Non-letter boundaries, matches "ai"
|
|
|
+- ✅ "Artificial intelligence grows rapidly" ← Matches "artificial intelligence"
|
|
|
+- ❌ "Resistance training is important" ← "ai" in "training" doesn't match
|
|
|
+- ❌ "The maid cleaned the room" ← "ai" in "maid" doesn't match
|
|
|
+
|
|
|
+**Combined Usage:**
|
|
|
+```txt
|
|
|
+# Regex + Normal + Filter
|
|
|
+/\bai\b/
|
|
|
+artificial intelligence
|
|
|
+machine learning
|
|
|
+!advertisement
|
|
|
+```
|
|
|
+
|
|
|
+**Notes:**
|
|
|
+- Regex automatically enables case-insensitive matching (`re.IGNORECASE`)
|
|
|
+- Supports JavaScript-style `/pattern/i` syntax (flags are ignored since case-insensitive is always enabled)
|
|
|
+- Invalid regex syntax will be treated as normal words
|
|
|
+- Regex can be used for normal words, required words(`+`), and filter words(`!`)
|
|
|
+
|
|
|
+**💡 Can't Write Regex? Let AI Help!**
|
|
|
+
|
|
|
+If you're not familiar with regular expressions, just ask ChatGPT / Claude / DeepSeek to generate one:
|
|
|
+
|
|
|
+> I need a Python regex to match the word "ai" but not match "ai" in "training".
|
|
|
+> Please give me the regex in `/pattern/` format without extra explanation.
|
|
|
+
|
|
|
+AI will give you something like: `/(?<![a-zA-Z])ai(?![a-zA-Z])/`
|
|
|
+
|
|
|
+##### 7. **Display Name** `=> alias` - Custom Display Text (v4.7.0 new)
|
|
|
+
|
|
|
+Regex patterns can look unfriendly in push notifications and HTML pages. Use `=> alias` syntax to set a display name:
|
|
|
+
|
|
|
+```txt
|
|
|
+/(?<![a-zA-Z])ai(?![a-zA-Z])/ => AI Related
|
|
|
+artificial intelligence
|
|
|
+```
|
|
|
+
|
|
|
+**Effect:** Push notifications and HTML pages show "AI Related" instead of the complex regex
|
|
|
+
|
|
|
+**Syntax Format:**
|
|
|
+```txt
|
|
|
+# Regex + Display Name
|
|
|
+/pattern/ => Display Name
|
|
|
+/pattern/i => Display Name # Supports flags syntax (flags are ignored)
|
|
|
+/pattern/=>Display Name # Spaces around => are optional
|
|
|
+
|
|
|
+# Normal Word + Display Name
|
|
|
+deepseek => DeepSeek News
|
|
|
+```
|
|
|
+
|
|
|
+**Example:**
|
|
|
+```txt
|
|
|
+# Config
|
|
|
+/(?<![a-zA-Z])ai(?![a-zA-Z])/ => AI Related
|
|
|
+artificial intelligence
|
|
|
+```
|
|
|
+
|
|
|
+| Original Config | Push/HTML Display |
|
|
|
+|----------------|-------------------|
|
|
|
+| `/(?<![a-z])ai(?![a-z])/` + `artificial intelligence` | `(?<![a-z])ai(?![a-z]) artificial intelligence` |
|
|
|
+| `/(?<![a-z])ai(?![a-z])/ => AI Related` + `artificial intelligence` | **`AI Related`** |
|
|
|
+
|
|
|
+**Notes:**
|
|
|
+- Display name only needs to be set on the first word of a group
|
|
|
+- If multiple words have display names, the first one is used
|
|
|
+- Without display name, all words in the group are concatenated
|
|
|
+
|
|
|
---
|
|
|
|
|
|
#### 🔗 Group Feature - Importance of Empty Lines
|