Dragneel commited on
Commit
916e265
·
verified ·
1 Parent(s): 5f48469

Upload folder using huggingface_hub

Browse files
.github/workflows/update_space.yml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Run Python script
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+
12
+ steps:
13
+ - name: Checkout
14
+ uses: actions/checkout@v2
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v2
18
+ with:
19
+ python-version: '3.9'
20
+
21
+ - name: Install Gradio
22
+ run: python -m pip install gradio
23
+
24
+ - name: Log in to Hugging Face
25
+ run: python -c 'import huggingface_hub; huggingface_hub.login(token="${{ secrets.hf_token }}")'
26
+
27
+ - name: Deploy to Spaces
28
+ run: gradio deploy
README.md CHANGED
@@ -1,12 +1,6 @@
1
  ---
2
- title: Untold
3
- emoji: 🔥
4
- colorFrom: pink
5
- colorTo: red
6
  sdk: gradio
7
  sdk_version: 5.12.0
8
- app_file: app.py
9
- pinned: false
10
  ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: untold
3
+ app_file: app.py
 
 
4
  sdk: gradio
5
  sdk_version: 5.12.0
 
 
6
  ---
 
 
app.py ADDED
@@ -0,0 +1,502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import json
3
+ import time
4
+ import requests
5
+ from groq import Groq
6
+ import google.generativeai as genai
7
+ from datetime import datetime, timedelta
8
+ import pytz
9
+ from playwright.async_api import async_playwright
10
+ import asyncio
11
+ import random
12
+ from fake_useragent import UserAgent
13
+ from urllib.parse import urlparse, urljoin
14
+ from tenacity import retry, stop_after_attempt, wait_exponential
15
+ import os
16
+
17
+ # Constants
18
+ CHAPTERS_FILE = 'scraped_chapters.json'
19
+ SPLIT_CHAPTERS_FILE = 'split_scraped_chapters.json'
20
+ TRANSLATIONS_FILE = 'chapter_translated.json'
21
+ GLOSSARY_FILE = 'chapter_glossary.json'
22
+
23
+ ua = UserAgent()
24
+
25
+ # Function to scrape chapters from xbanxia
26
+ async def scrape_xbanxia(first_chapter_url, final_url=None):
27
+ async with async_playwright() as p:
28
+ browser = await p.chromium.launch()
29
+ context = await browser.new_context(user_agent=ua.random)
30
+ page = await context.new_page()
31
+ try:
32
+ page = await fetch_page(page, first_chapter_url)
33
+ chapters = []
34
+ next_url = first_chapter_url
35
+ chapter_count = 0
36
+
37
+ while next_url and (not final_url or next_url != final_url):
38
+ try:
39
+ if chapter_count % 5 == 0:
40
+ await context.set_extra_http_headers({"User-Agent": ua.random})
41
+
42
+ page = await fetch_page(page, next_url)
43
+
44
+ # Wait for content to load
45
+ await page.wait_for_selector('#nr_title', state='visible', timeout=60000)
46
+ await page.wait_for_selector('#nr1', state='visible', timeout=60000)
47
+
48
+ # Extract title
49
+ title_element = await page.query_selector('#nr_title')
50
+ title = await title_element.inner_text() if title_element else None
51
+
52
+ # Extract content
53
+ content_element = await page.query_selector('#nr1')
54
+ content = await content_element.inner_text() if content_element else None
55
+
56
+ # Extract next URL
57
+ next_link = await page.query_selector('.nav2 .next a')
58
+ next_url = await next_link.get_attribute('href') if next_link else None
59
+
60
+ if next_url and not next_url.startswith('http'):
61
+ base_url = '/'.join(first_chapter_url.split('/')[:3])
62
+ next_url = base_url + next_url
63
+
64
+ if title and content:
65
+ # Clean up the content
66
+ content_lines = content.split('\n')
67
+ clean_content = '\n'.join(line.strip() for line in content_lines
68
+ if line.strip() and not line.strip().startswith('第'))
69
+
70
+ chapters.append({
71
+ 'title': title.strip(),
72
+ 'content': clean_content,
73
+ 'url': next_url
74
+ })
75
+
76
+ print(f"Scraped chapter {chapter_count + 1}: {title}")
77
+ chapter_count += 1
78
+
79
+ # Random delay between requests
80
+ await asyncio.sleep(random.uniform(2, 5))
81
+
82
+ except Exception as e:
83
+ print(f"Error scraping chapter at {next_url}: {str(e)}")
84
+ await asyncio.sleep(60) # Wait for 1 minute before retrying
85
+
86
+ await browser.close()
87
+ return chapters
88
+
89
+ except Exception as e:
90
+ print(f"An error occurred during scraping: {str(e)}")
91
+ await browser.close()
92
+ return None
93
+
94
+ # Function to scrape chapters from 69shuba.cx
95
+ async def scrape_69shu(first_chapter_url, final_url=None):
96
+ async with async_playwright() as p:
97
+ browser = await p.chromium.launch()
98
+ context = await browser.new_context(user_agent=ua.random)
99
+ page = await context.new_page()
100
+
101
+ try:
102
+ # Navigate to the first chapter
103
+ page = await fetch_page(page, first_chapter_url)
104
+
105
+ chapters = []
106
+ next_url = first_chapter_url
107
+ chapter_count = 0
108
+
109
+ while next_url and (not final_url or next_url != final_url):
110
+ try:
111
+ # Change user agent every 5 chapters
112
+ if chapter_count % 5 == 0:
113
+ await context.set_extra_http_headers({"User-Agent": ua.random})
114
+
115
+ page = await fetch_page(page, next_url)
116
+ await page.wait_for_selector('.txtnav', state='visible', timeout=60000)
117
+
118
+ # Extract title
119
+ title_element = await page.query_selector('.txtnav h1')
120
+ title = await title_element.inner_text() if title_element else None
121
+
122
+ if not title:
123
+ title_element = await page.query_selector('.txtnav')
124
+ if title_element:
125
+ title_text = await title_element.inner_text()
126
+ title = title_text.split('\n')[0].strip()
127
+
128
+ # Extract content
129
+ content_element = await page.query_selector('.txtnav')
130
+ content = await content_element.inner_text() if content_element else None
131
+
132
+ # Extract next URL
133
+ next_link = await page.query_selector('.page1 a:nth-child(4)')
134
+ next_url = await next_link.get_attribute('href') if next_link else None
135
+
136
+ if title and content:
137
+ # Clean up the content
138
+ content_lines = content.split('\n')
139
+ clean_content = '\n'.join(line.strip() for line in content_lines if line.strip() and not line.strip().startswith('Chapter'))
140
+
141
+ chapters.append({
142
+ 'title': title,
143
+ 'content': clean_content,
144
+ 'url': next_url
145
+ })
146
+
147
+ print(f"Scraped chapter {chapter_count + 1}: {title}")
148
+ chapter_count += 1
149
+
150
+ # Add a random delay between requests
151
+ await asyncio.sleep(random.uniform(2, 5))
152
+
153
+ except Exception as e:
154
+ print(f"Error scraping chapter at {next_url}: {str(e)}")
155
+ await asyncio.sleep(60) # Wait for 1 minute before trying the next chapter
156
+
157
+ await browser.close()
158
+ return chapters
159
+
160
+ except Exception as e:
161
+ print(f"An error occurred during scraping: {str(e)}")
162
+ await browser.close()
163
+ return None
164
+
165
+ # Function to fetch a page
166
+ @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
167
+ async def fetch_page(page, url):
168
+ await page.goto(url)
169
+ await page.wait_for_load_state('networkidle')
170
+ return page
171
+
172
+ # Function to scrape chapters based on the domain
173
+ async def scrape_task(first_chapter_url, final_url=None):
174
+ """Scrape chapters and save to JSON file."""
175
+ domain = urlparse(first_chapter_url).netloc
176
+ if 'xbanxia' in domain:
177
+ result = await scrape_xbanxia(first_chapter_url, final_url)
178
+ elif '69shuba.cx' in domain:
179
+ result = await scrape_69shu(first_chapter_url, final_url)
180
+ else:
181
+ print(f"Unsupported domain: {domain}")
182
+ return
183
+ if result:
184
+ with open(CHAPTERS_FILE, 'w', encoding='utf-8') as f:
185
+ json.dump(result, f, ensure_ascii=False, indent=2)
186
+ print(f'Scraping completed. Data saved to {CHAPTERS_FILE}')
187
+ else:
188
+ print('Scraping failed or was interrupted.')
189
+
190
+ # Function to split long chapters
191
+ def split_long_chapter(title, content, max_length=2000):
192
+ """
193
+ Split a long chapter into multiple parts while preserving paragraph and sentence integrity.
194
+ Splits occur at newline (\n) or sentence-ending symbol (。).
195
+ """
196
+ # Count only Chinese characters for length check
197
+ chinese_char_count = sum(1 for char in content if '\u4e00' <= char <= '\u9fff')
198
+
199
+ if chinese_char_count <= max_length:
200
+ return [{"title": title, "content": content}]
201
+
202
+ parts = []
203
+ current_part = []
204
+ current_chinese_count = 0
205
+ part_number = 1
206
+
207
+ # First split by paragraphs (newlines)
208
+ paragraphs = content.split('\n')
209
+
210
+ for paragraph in paragraphs:
211
+ if not paragraph.strip():
212
+ continue
213
+
214
+ # Split paragraph into sentences
215
+ sentences = paragraph.split('。')
216
+ sentences = [s.strip() + '。' for s in sentences if s.strip()]
217
+
218
+ for sentence in sentences:
219
+ sentence_chinese_count = sum(1 for char in sentence if '\u4e00' <= char <= '\u9fff')
220
+
221
+ # If adding this sentence would exceed the limit
222
+ if current_chinese_count + sentence_chinese_count > max_length and current_part:
223
+ # Save current part
224
+ part_content = '\n'.join(current_part)
225
+ parts.append({
226
+ "title": f"{title} Part {part_number}",
227
+ "content": part_content
228
+ })
229
+ # Start new part
230
+ current_part = [sentence]
231
+ current_chinese_count = sentence_chinese_count
232
+ part_number += 1
233
+ else:
234
+ current_part.append(sentence)
235
+ current_chinese_count += sentence_chinese_count
236
+
237
+ # Save the last part if there's anything remaining
238
+ if current_part:
239
+ part_content = '\n'.join(current_part)
240
+ parts.append({
241
+ "title": f"{title} Part {part_number}",
242
+ "content": part_content
243
+ })
244
+
245
+ return parts
246
+
247
+ # Function to process chapters
248
+ def process_chapters(input_file, output_file, max_length=5000):
249
+ """
250
+ Process chapters from an input JSON file, splitting long chapters if necessary,
251
+ and save the result to an output JSON file.
252
+ """
253
+ try:
254
+ # Check if the input file exists
255
+ if not os.path.exists(input_file):
256
+ raise FileNotFoundError(f"Input file '{input_file}' not found. Please ensure the scraping process runs first.")
257
+
258
+ with open(input_file, 'r', encoding='utf-8') as f:
259
+ chapters = json.load(f)
260
+
261
+ processed_chapters = []
262
+ for chapter in chapters:
263
+ title = chapter['title']
264
+ content = chapter['content']
265
+
266
+ split_chapters = split_long_chapter(title, content, max_length)
267
+ processed_chapters.extend(split_chapters)
268
+
269
+ with open(output_file, 'w', encoding='utf-8') as f:
270
+ json.dump(processed_chapters, f, ensure_ascii=False, indent=2)
271
+
272
+ return len(processed_chapters)
273
+ except Exception as e:
274
+ print(f"Error processing chapters: {str(e)}")
275
+ raise
276
+
277
+ def create_glossary(gemini_api_key, groq_api_key=None):
278
+ """Create a glossary from random chapters using Groq or Gemini API."""
279
+ with open(SPLIT_CHAPTERS_FILE, 'r', encoding='utf-8') as f:
280
+ book_data = json.load(f) # book_data is a list of chapters
281
+
282
+ # Select 20 random chapters from the first 100 chapters
283
+ random_chapters = random.sample(book_data, min(2, len(book_data)))
284
+
285
+ preliminary_glossary = []
286
+
287
+ for i, chapter in enumerate(random_chapters):
288
+ max_retries = 3
289
+ retry_count = 0
290
+
291
+ while retry_count < max_retries:
292
+ try:
293
+ prompt = f"""Analyze the following Chinese web novel chapter and create a glossary of 5 important terms or names. Each entry should include the Chinese term and its English equivalent or explanation. Translate character names, locations names, unique concepts, cultivation levels, power levels, power techniques, or culturally specific terms to English.
294
+ The target audience are people from USA that don't know much about Chinese language and culture.
295
+ Very important Note: Only Use Pinyin for Character's Name.
296
+
297
+ Chinese chapter:
298
+ {chapter['content']}
299
+
300
+
301
+ Create a glossary of 5 terms in the following format:
302
+ Chinese Term: English Equivalent
303
+ for example: 朱士久 : Zhu Shijiu
304
+
305
+ """
306
+
307
+ if groq_api_key:
308
+ # Use Groq API if the key is provided
309
+ client = Groq(api_key=groq_api_key)
310
+ chat_completion = client.chat.completions.create(
311
+ messages=[{"role": "user", "content": prompt}],
312
+ model="llama3-70b-8192",
313
+ timeout=30
314
+ )
315
+ chapter_glossary = chat_completion.choices[0].message.content
316
+ else:
317
+ # Fallback to Gemini API if Groq key is not provided
318
+ genai.configure(api_key=gemini_api_key)
319
+ gemini_model = genai.GenerativeModel(
320
+ model_name="gemini-1.5-flash",
321
+ generation_config={
322
+ "temperature": 1,
323
+ "top_p": 0.95,
324
+ "top_k": 64,
325
+ "max_output_tokens": 8192,
326
+ }
327
+ )
328
+ gemini_response = gemini_model.generate_content(prompt)
329
+ chapter_glossary = gemini_response.text
330
+
331
+ preliminary_glossary.extend(chapter_glossary.split('\n'))
332
+ print(f"Created glossary entries for chapter: {chapter['title']}")
333
+ break
334
+ except Exception as e:
335
+ retry_count += 1
336
+ if retry_count < max_retries:
337
+ print(f"Error processing chapter {chapter['title']}: {str(e)}")
338
+ print(f"Retrying in 60 seconds... (Attempt {retry_count + 1} of {max_retries})")
339
+ time.sleep(60)
340
+ else:
341
+ print(f"Failed to process chapter {chapter['title']} after {max_retries} attempts: {str(e)}")
342
+
343
+ time.sleep(5)
344
+
345
+ # Refine the glossary
346
+ refine_prompt = """Refine the following glossary for a Chinese web novel. Remove duplicates, redundant entries, and irrelevant words. Ensure consistency in naming and explanations.
347
+ Provide the output in JSON Format.
348
+ Preliminary Glossary:
349
+ {}
350
+
351
+ Retain people's names in Pinyin format (e.g., Chen Jingle), but fully translate all other terms, phrases, and concepts into English. Avoid using Pinyin for non-name elements to ensure clarity and natural flow for English readers.
352
+ Provide the refined glossary in the following format:
353
+ Chinese Characters: English Equivalent (No Explanations)
354
+ for example: 朱士久 : Zhu Shijiu
355
+ 白家 : Bai Family
356
+ 成长系统: Growth System ( not "Chengzhang Xitong)
357
+ """.format('\n'.join(preliminary_glossary))
358
+
359
+ try:
360
+ if groq_api_key:
361
+ # Use Groq API for refinement if the key is provided
362
+ client = Groq(api_key=groq_api_key)
363
+ chat_completion = client.chat.completions.create(
364
+ messages=[{"role": "user", "content": refine_prompt}],
365
+ model="llama3-70b-8192",
366
+ timeout=60
367
+ )
368
+ refined_glossary = chat_completion.choices[0].message.content
369
+ else:
370
+ # Fallback to Gemini API for refinement
371
+ gemini_response = gemini_model.generate_content(refine_prompt)
372
+ refined_glossary = gemini_response.text
373
+
374
+ # Save the refined glossary
375
+ with open(GLOSSARY_FILE, 'w', encoding='utf-8') as f:
376
+ json.dump(refined_glossary.split('\n'), f, ensure_ascii=False, indent=2)
377
+ print(f'Glossary creation completed. Glossary saved to {GLOSSARY_FILE}')
378
+
379
+ except Exception as e:
380
+ print(f"Error refining glossary: {str(e)}")
381
+ raise
382
+
383
+ # Function to translate chapters
384
+ def translate_task(gemini_api_key, groq_api_key):
385
+ # Configure Gemini
386
+ genai.configure(api_key=gemini_api_key)
387
+ gemini_model = genai.GenerativeModel(
388
+ model_name="gemini-1.5-flash",
389
+ generation_config={
390
+ "temperature": 1,
391
+ "top_p": 0.95,
392
+ "top_k": 64,
393
+ "max_output_tokens": 8192,
394
+ }
395
+ )
396
+
397
+ # Load data and configuration
398
+ with open(SPLIT_CHAPTERS_FILE, 'r', encoding='utf-8') as f:
399
+ book_data = json.load(f)
400
+ with open(GLOSSARY_FILE, 'r', encoding='utf-8') as f:
401
+ glossary = json.load(f)
402
+ formatted_glossary = "\n".join(glossary)
403
+
404
+ # Configure Groq
405
+ groq_client = Groq(api_key=groq_api_key) if groq_api_key else None
406
+
407
+ translations = []
408
+
409
+ for i, chapter in enumerate(book_data):
410
+ prompt = f"""Translate the following Chinese web novel chapter to English. Maintain the original tone and style of the novel. Preserve any cultural references or idioms, providing brief explanations in parentheses if necessary.
411
+ If Paragraphs are stuck together, split them. Retain people's names in Pinyin format (e.g., Chen Jingle), but fully translate all other terms, phrases, and concepts into English. Avoid using Pinyin for non-name elements to ensure clarity and natural flow for English readers.
412
+ You should translate every chinese character to English. The chapter should be fully translated.
413
+ Glossary:
414
+ {formatted_glossary}
415
+
416
+ Chinese chapter:
417
+ {chapter['content']}
418
+ Note: No introductory sentences nor concluding sentences. Just directly provide the translation.
419
+ Translate the above text to English, using the glossary for consistent translations of key terms:"""
420
+
421
+ translation = None
422
+
423
+ # Try Gemini first
424
+ print("Falling back to Gemini...")
425
+ for attempt in range(2):
426
+ try:
427
+ gemini_response = gemini_model.generate_content(prompt)
428
+ translation = gemini_response.text
429
+ break
430
+ except Exception as e:
431
+ print(f"Gemini error (attempt {attempt + 1}): {str(e)}")
432
+ if attempt == 1:
433
+ print("Gemini failed. Falling back to Groq LLaMA model")
434
+ else:
435
+ time.sleep(30)
436
+
437
+ # If Gemini failed, try Groq
438
+ if not translation and groq_client:
439
+ for attempt in range(2):
440
+ try:
441
+ chat_completion = groq_client.chat.completions.create(
442
+ messages=[{"role": "user", "content": prompt}],
443
+ model="llama3-70b-8192",
444
+ timeout=30
445
+ )
446
+ translation = chat_completion.choices[0].message.content
447
+ break
448
+ except Exception as e:
449
+ print(f"Groq error (attempt {attempt + 1}): {str(e)}")
450
+ if attempt == 1:
451
+ print(f"Failed to translate Chapter {i + 1} after all attempts")
452
+ translation = f"TRANSLATION FAILED: {chapter['title']}"
453
+ else:
454
+ time.sleep(30)
455
+
456
+ # Add the complete chapter translation to results
457
+ translations.append({
458
+ 'title': chapter['title'],
459
+ 'translated_content': translation
460
+ })
461
+ print(f"Completed translation of Chapter {i + 1}")
462
+ print("First 500 characters of translation:")
463
+ print(translation[:500] + "...")
464
+ print('=======================================')
465
+ time.sleep(5) # Sleep between requests
466
+
467
+ # Save all translations
468
+ with open(TRANSLATIONS_FILE, 'w', encoding='utf-8') as f:
469
+ json.dump(translations, f, ensure_ascii=False, indent=2)
470
+ print(f'Translation completed. Translations saved to {TRANSLATIONS_FILE}')
471
+
472
+ # Gradio Interface
473
+ def process_novel(first_chapter_url, final_url, novel_name, gemini_api_key, groq_api_key):
474
+ # Scrape chapters
475
+ asyncio.run(scrape_task(first_chapter_url, final_url))
476
+
477
+ # Process chapters (split long chapters)
478
+ process_chapters(CHAPTERS_FILE, SPLIT_CHAPTERS_FILE)
479
+
480
+ create_glossary(gemini_api_key, groq_api_key)
481
+
482
+ # Translate chapters
483
+ translate_task(gemini_api_key, groq_api_key)
484
+
485
+ return "Scraping, Processing, and Translation Completed!"
486
+
487
+ # Gradio Interface
488
+ iface = gr.Interface(
489
+ fn=process_novel,
490
+ inputs=[
491
+ gr.Textbox(label="First Chapter URL"),
492
+ gr.Textbox(label="Final Chapter URL (optional)"),
493
+ gr.Textbox(label="Novel Name"),
494
+ gr.Textbox(label="Gemini API Key"),
495
+ gr.Textbox(label="Groq API Key (optional)"),
496
+ ],
497
+ outputs="text",
498
+ title="Novel Scraper and Translator",
499
+ description="Input the first chapter URL, final chapter URL (optional), novel name, and API keys to scrape and translate the novel."
500
+ )
501
+
502
+ iface.launch()
chapter_glossary.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ "```json",
3
+ "{",
4
+ " \"glossary\": {",
5
+ " \"冯玉漱\": \"Feng Yushu\",",
6
+ " \"张养序\": \"Zhang Yangxu\",",
7
+ " \"宁哲\": \"Ning Zhe\",",
8
+ " \"古碑镇\": \"Gubei Town\",",
9
+ " \"何家村\": \"Hejia Village\",",
10
+ " \"新世界集团\": \"New World Group\"",
11
+ " }",
12
+ "}",
13
+ "```",
14
+ ""
15
+ ]
chapter_translated.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "title": "第1章 黄历",
4
+ "translated_content": "Chapter 1: The Farmer's Almanac\n\nNovember 18, 2024\nChapter 1: The Farmer's Almanac\n\nThe twenty-third day of the fourth month of the lunar calendar, Grain in Ear.\n\nRain fell outside. Ning Zhe entered the ancestral shrine dedicated to the Serpent God, flipped open the old farmer's almanac nailed to the serpent's tongue, and checked the auspicious and inauspicious events for the day:\n\n【Auspicious:】\n【Inauspicious: Travel, burial, funeral processions, sacrifices】\n\n\"Inauspicious for travel… Does today's rule mean you can't go out?\" Ning Zhe examined the almanac, committing its contents to memory.\n\nThe almanac's contents were the key to survival in this isolated mountain village.\n\nThis village was called Hejia Village, situated in the center of a basin surrounded by mountains, cut off from the outside world. The entire village was divided into east and west halves by a river, connected by three arched bridges.\n\nThe people of Hejia Village believed in the Serpent God, each household enshrining a portrait of the deity. The Serpent God was depicted as a large jade green serpent with a pair of curved horns. A statue carved from a camphor tree root was enshrined in the ancestral shrine at the south end of the village, surrounded by ancestral tablets – the place where Ning Zhe now stood.\n\nAn old farmer's almanac was nailed to the Serpent God statue's tongue. The most important thing for the villagers of Hejia Village every midnight was to come to the shrine, turn a page of the almanac, check the auspicious and inauspicious events of the day, and then they could sleep peacefully.\n\nAccording to the villagers, the auspicious and inauspicious events in the almanac were heavenly secrets revealed by the Serpent God.\n\nThe auspicious and inauspicious events given by the almanac each day were random. Knowing the contents allowed one to avoid misfortune and invite good fortune. Doing what was auspicious would bring good luck, while violating the inauspicious would bring bad luck. Repeated violations would bring terrible misfortune, and those who violated too many or too serious inauspicious events might even die mysteriously.\n\nNing Zhe had firsthand experience of this.\n\nWhen he first entered the village yesterday, he unintentionally violated the \"seeing birth\" and \"pest control\" taboos listed in the previous day's auspicious and inauspicious events because he didn't understand the local rules, resulting in a terrible day:\n\nHe tripped over a crack in the stone pavement, a falling tile hit the back of his head when he passed under a roof, and just as he was about to go out, a torrential downpour began… He barely made it through the night, and the secluded mountain village was about to welcome a new day. Ning Zhe waited at the shrine entrance, and as soon as midnight passed, he immediately opened the almanac to check the auspicious and inauspicious events for the day.\n\nNing Zhe checked the almanac's contents again:\n\n【Auspicious:】\n【Inauspicious: Travel, burial, funeral processions, sacrifices】\n\n\"Burial, funeral processions, and sacrifices are all understandable, but what does 'travel' specifically mean? Does it mean traveling far away, or does it simply mean leaving houses or buildings and going outside? Also…\"\n\nNing Zhe was puzzled, his gaze shifting slightly upwards to the blank space after the character for \"Auspicious\":\n\n\"Why does the almanac only list inauspicious events and no auspicious ones?\"\n\nEverything inauspicious today?\n\nAs he pondered this, he heard faint footsteps outside the shrine; some villagers must be coming to check the almanac. Ning Zhe left the lotus pedestal where the Serpent God statue was enshrined and walked towards the side door of the shrine, preparing to leave.\n\nThe villagers of Hejia Village were not to be trusted, and if possible, Ning Zhe didn't want to interact with them much.\n\nBut the candlelight behind him flickered slightly. Reaching the side door, he hesitated. Unable to determine the exact meaning of the \"travel\" taboo, he wasn't very daring to go out; he'd had enough bad luck yesterday.\n\n\"Midnight has passed, and the auspicious and inauspicious events have been updated. If simply leaving the house and moving around the village is considered 'travel,' then the villagers who came to the shrine to check the almanac have already violated the taboo,\" Ning Zhe thought to himself.\n\nThe Serpent God was merciful; those who unwittingly violated taboos for the first time would only suffer minor misfortunes, nothing life-threatening. In other words, by observing whether the villagers who came to the shrine were unlucky, he should be able to roughly determine whether they had violated the 'travel' taboo.\n\nWith this in mind, Ning Zhe didn't rush to leave. He moved to the side of a wall-mounted pillar, pure black, with a dark red old silk curtain hanging on it. A dim candle flickered slightly below the curtain. Ning Zhe hid behind the curtain, observing the main entrance of the shrine through the cracks in the candlelight.\n\nSoft, muffled footsteps mixed with the sound of splashing water. A pair of white sneakers splashed through puddles in the street and arrived at the shrine entrance.\n\n“……” Ning Zhe's eyes were fixed on the figure entering from the outside, his pupils constricting slightly in shock.\n\nIt was a strong young man, seemingly under thirty, in a simple tank top and loose running shorts. His strong arms and running shoes indicated he was a fitness enthusiast; yet this unremarkable attire sent chills down Ning Zhe's spine.\n\n\"Since I was drawn into Hejia Village, every villager I've met has looked strange. They wore outdated linen clothes, used primitive ox-drawn plows to cultivate the fields, and spoke with a heavy Hakka accent…There wasn't even an electric light in the houses or on the roads.\"\n\n\"If it weren't for the bizarre rules here, and the villagers' stiff movements like shadow puppets, I would have even suspected I'd time-traveled to ancient times.\"\n\nBut in this bizarre 'ancient village,' he saw someone else wearing modern clothing.\n\n\"Who is he? Is he, like me, drawn into this bizarre place? Are there other living people here besides me?\"\n\nVarious questions filled Ning Zhe's mind, but his cautious nature prevented him from acting rashly. Slowing his breathing, he tried his best to remain silent, his eyes fixed on the strong man in the tank top and sneakers as he entered the shrine and went straight to the inner hall, stopping in front of the Serpent God statue.\n\n\"His goal is also the almanac.\" Ning Zhe understood.\n\nThis man in the tank top was likely, like himself, an outsider who had accidentally stumbled into this strange village, perhaps even unintentionally violating the Serpent God's taboos. His purpose in coming to the shrine late at night was probably the same as his own—to consult the almanac and check the auspicious and inauspicious events for the day.\n\nThe man in the tank top looked up at the old almanac hanging from the Serpent God's tongue, a puzzled expression on his face. Ning Zhe knew what he was wondering:\n\n\"He thinks he's the first person to come to the shrine, that the almanac hasn't been turned yet, and that it's still on yesterday's page. So he's probably wondering why the almanac's contents don't match the taboos he violated yesterday.\"\n\nIn reality, Ning Zhe, having arrived earlier, had already turned the almanac to today's page, of course it wouldn't match.\n\nThe man in the tank top hesitated for a moment in front of the Serpent God statue, then finally reached out for the almanac. He was about to turn the page.\n\n\"That's right, this almanac doesn't have Gregorian dates; it uses the lunar calendar. Modern people accustomed to the Gregorian calendar will find it difficult to determine whether the date shown is today based on the lunar calendar date alone.\" Ning Zhe roughly guessed the situation.\n\nThis situation could be easily solved by simply checking a phone; calendar apps usually display both Gregorian and lunar dates simultaneously. But perhaps because the almanac's contents didn't match the taboos he had actually violated, the chaotic facts panicked the man in the tank top. In his extreme tension, he couldn't calm down enough to think of this.\n\nPlease...collect...6...9...books....!\n\nUnpredictable punishments create immeasurable authority. Vague rules and imminent death; in such an environment, few could remain rational.\n\nNing Zhe held his breath, his eyes fixed on the man's hand reaching for the almanac: \"If the almanac, already turned to today's page, is turned again, will it show tomorrow's auspicious and inauspicious events?\"\n\nHe had no intention of warning the other man. Ning Zhe was only curious about one thing: Would the Serpent God permit checking tomorrow's auspicious and inauspicious events today?\n\nThe answer came quickly.\n\nThe man's short, thick fingers lifted and turned a page of the almanac, about to hang the page with today's auspicious and inauspicious events back on the nail. But before the page could be hung, almost less than a second after he turned the almanac, a dull thud echoed through the shrine.\n\nIt was the sound of a human body hitting the earthen floor. He hadn't managed to turn the almanac to tomorrow's page; his whole body collapsed to the ground like a deflated balloon, motionless.\n\n\"So the answer is no,\" Ning Zhe murmured to himself.\n\nAlthough he hadn't actually examined the body, a strange premonition arose in Ning Zhe's heart, as if someone had given him a hint.\n\nHe felt that the man was dead.\n\nA chilly night breeze blew in from the main entrance. The turned page didn't fall back into place, like a withered leaf fluttering in the wind, rustling, or like a butterfly with deep yellow wings, fluttering in the quiet shrine, \"Tomorrow's Auspicious and Inauspicious Events\" faintly visible beneath its wings.\n\nNing Zhe took a deep breath, averting his gaze from the almanac but not intending to leave.\n\nThe man's sudden death was not due to bad luck but to violating some hidden death taboo independent of the \"auspicious and inauspicious events\" for the day.\n\n\"A sub-rule under the rules?\" Ning Zhe pondered as he quickly stepped out from behind the curtain.\n\nA cool draft blew through the shrine. Ning Zhe swiftly dragged the man's body away from the Serpent God statue and hid it under the offering table covered with a large red tablecloth. A freshly dead person wouldn't smell for a while, so the body should remain hidden here.\n\nNing Zhe tidied the tablecloth, quickly left the offering table, and hid back behind the curtain against the wall.\n\n\"There must be other living people in this village besides me and this man, and they might also come to the shrine to consult the almanac.\"\n\nNing Zhe was not frightened by the bizarre death before him; he still clearly knew what he should do—by observing whether others coming from outside were unlucky, he might be able to determine the specific meaning of the \"travel\" taboo in today's auspicious and inauspicious events.\n\nThe almanac's contents were the key to survival in this isolated mountain village.\n\n(End of Chapter)\n"
5
+ },
6
+ {
7
+ "title": "第2章 张养序",
8
+ "translated_content": "Chapter 2 Zhang Yangxu\n\nWhile moving the body, Ning Zhe casually pocketed the vest-wearing man's phone. A hundred-yuan bill was tucked inside the black phone case, but there was no ID card or driver's license—nothing to confirm his identity.\n\nNing Zhe didn't know the man's screen lock password, so he used the corpse's fingerprint to unlock it. After unlocking, the first thing Ning Zhe did was go into the system settings and set the automatic lock to 'never,' before starting to browse the man's phone.\n\n—A person's weak bioelectricity in their cells completely disappears about three hours after death. At this point, electronic devices like phones can no longer recognize their fingerprints.\n\nThe vest-wearing man's WeChat nickname was 'AAA Qiao Gaoli Fitness Club - Coach Zhiyuan,' and his real name was verified as 'Lin *yuan.' (Qiao Gaoli is likely a place name)\n\nLin Zhiyuan had many WeChat friends, mostly women marked as 'clients' or 'students.' In a recent chat with a female client surnamed Cai, Lin Zhiyuan mentioned that he was going home to see his parents and would have a colleague cover his shifts for a few days.\n\nThe woman replied with a \"Miss you\" emoticon.\n\nLooking through his Moments (朋友圈 - WeChat's Moments feature, similar to Facebook's feed), Lin Zhiyuan's last post was from yesterday morning. The content was: 'The food at the highway service station is too expensive! Expensive and greasy, eating one meal requires a month of dieting to recover,' accompanied by a picture of an N1 sports car parked next to a charging station.\n\n\"Lin Zhiyuan was still complaining about the greasy food at a highway service station yesterday morning, which means he entered the village sometime after that,\" Ning Zhe recalled entering Hejia Village himself at 7 a.m., several hours before Lin Zhiyuan.\n\nAfter confirming that data was enabled, Ning Zhe sent a message to the female client surnamed Cai: 'Are you there?'\n\nA red exclamation mark appeared on the left side of the message, indicating sending failure.\n\n\"Failed again, as expected,\" Ning Zhe wasn't surprised.\n\nChecking the call logs and chat interface, it was clear that Lin Zhiyuan had called contacts labeled as parents and girlfriend multiple times, and he had also tried the carrier's emergency call function, but all attempts to contact the outside world had failed.\n\nNing Zhe wasn't surprised by this, because the same thing happened to him. Since entering Hejia Village, he had completely lost all contact with the outside world. The 4G signal showed full bars, but he couldn't send or receive a single message.\n\nA normal person might feel frustrated by this, but Ning Zhe wasn't normal. For reasons unknown, Ning Zhe exited WeChat and used Lin Zhiyuan's phone to call his own number.\n\nBuzz—buzz—\n\nA buzzing vibration came from his thigh; his phone in his pocket had been answered.\n\nAt that moment, footsteps were heard outside the ancestral hall.\n\nNing Zhe hung up, left Lin Zhiyuan's phone on and slipped it into his coat pocket, focusing on the sounds outside.\n\nWhen Lin Zhiyuan had entered, the sound of his air-cushioned sneakers on the dirt and stone path was very muffled. This time, however, the footsteps were crisp and clear—the sound of hard heels tapping on the ground, tic-tic-tap-tap, more than one person, two.\n\nNing Zhe's gaze was fixed on the doorway. Entering were a man in a suit and a woman in an office lady uniform. Their polished leather shoes and high heels were splattered with yellow mud.\n\n\"How could it be him?\" Ning Zhe was surprised.\n\nHe knew the man, though the man might not know him.\n\nNing Zhe recognized the man from the news. His name was Zhang Yangxu, the head of Qinzou's largest real estate development company, New World Group. Ning Zhe's reason for leaving school and returning to his rural hometown was because Zhang Yangxu's company was interested in acquiring land nearby, to develop a new park in his hometown of Gubei Town. Ning Zhe's family home was on the company's planned demolition list.\n\nHis grandparents were illiterate, so he, a high school student, had to take a few days off to return home.\n\n\"Zhang Yangxu has also been drawn into this place… Yes, I saw it in the local news before. New World Group executives were supposed to come to Gubei Town for an on-site inspection in the next few days to finalize the land acquisition contract. I didn't expect the CEO to come in person. The woman next to him must be Zhang Yangxu's secretary or assistant.\"\n\nBased on fragmented information, Ning Zhe pieced together the events: \"Lin Zhiyuan was drawn in while visiting his family. I was drawn in on my way home to help my grandparents with the demolition contract. Zhang Yangxu and that woman were drawn in during their on-site inspection in Gubei Town, right?\"\n\nWhat connection did this strange village called Hejia Village have with his hometown, Gubei Town?\n\nConfused, Ning Zhe watched Zhang Yangxu and the woman in the OL uniform walk to the lotus platform where the snake god statue was enshrined.\n\nZhang Yangxu used one hand to turn on his phone's flashlight and the other to hold down the fluttering yellow calendar paper, examining the contents carefully. Soon, he had the same doubts as Lin Zhiyuan before; the calendar's contents didn't match the taboos he had broken yesterday.\n\nHe glanced at his phone screen, his brow immediately furrowing: \"The twenty-third of April on the lunar calendar. It shows today's content; the calendar has been turned.\"\n\nZhang Yangxu's voice was low, slightly husky, calm and serious: \"Someone has been here.\"\n\nThe woman beside him whispered, \"Was it a villager?\"\n\nPlease...collect...6...9...books...!\n\nZhang Yangxu shook his head: \"We checked when we arrived; all the doors on the entire street were locked from the inside. No villager left their home tonight.\"\n\n\"Not a villager? Then…?\" The woman's voice was questioning, uncertain: \"Could there be others here besides us?\"\n\n\"Possible,\" Zhang Yangxu didn't deny it.\n\n\"…He said they checked all the locked doors on the street. If that's the case?\" Ning Zhe quickly calculated the time, a stone fell from his heart: \"It seems that simply leaving the house and walking on the village streets won't violate the 'travel' taboo.\"\n\nThe travel taboo referred to something else.\n\nHaving determined the auspiciousness of the day, Ning Zhe had no intention of further interacting with Zhang Yangxu and the woman. In this environment, no one was trustworthy. A few steps behind the pillar where he was hiding was the side door of the ancestral hall. It was time to leave.\n\nNing Zhe watched Zhang Yangxu and the woman discussing in front of the snake god statue, his back to the side door. He quietly backed away; the cold evening wind blew in from outside, chilling his spine.\n\nBefore he could reach the door, a cry of pain, tinged with tears, came from behind Ning Zhe.\n\n\"Who are you…\"\n\n(End of Chapter)\n"
9
+ },
10
+ {
11
+ "title": "第3章 冯玉漱",
12
+ "translated_content": "Chapter 3 Feng Yushu\n\nA strange, cry-like laugh made Ning Zhe shiver. Before his brain could process it, his body instinctively reacted, kicking backward towards the source of the sound.\n\nHe looked again; the owner of the voice was sprawled on the ground, clutching their abdomen and curled up in pain.\n\n\"It's a living person,\" Ning Zhe breathed a sigh of relief.\n\nFrom the ancestral hall behind him, Zhang Yangxu and the female office worker, alerted by the noise, were approaching the side door.\n\nKnowing he was exposed, Ning Zhe gave up on escaping. His gaze quickly swept over the woman who had suddenly appeared outside and had been kicked to the ground by him.\n\n\nShe was a middle-aged woman, seemingly in her thirties or forties, though that was just a guess. She wore numerous expensive and dazzling jewels and her clothing was flamboyant and luxurious. Her pearl necklace consisted of perfectly round and lustrous pearls; her left wrist sported a crystal-clear jade bracelet, likely costing more than the demolition compensation for Ning Zhe's old family home. Her long, black, shiny hair was meticulously styled with a gold and jade phoenix hairpin. Her skin was fair and smooth, without a single wrinkle—clearly someone who avoided the sun. A string of glossy prayer beads rested in her right hand, suggesting a possible Buddhist faith.\n\n\nShe wore a deep purple fitted gown, cinched at the waist with a lavender sash embroidered with delicate lace. The careful design and tailoring accentuated her curvaceous figure perfectly. Her oval face held a stunning beauty, like a lotus flower emerging from water, with elegant and refined features.\n\n…All this pointed to a wealthy woman who had lived a life of comfort and leisure, exceptionally well-maintained. People with good living conditions tend to age more slowly. Ning Zhe wasn't sure of her exact age; she looked thirty but might be forty, or even older.\n\nHearing Zhang Yangxu's footsteps approaching, Ning Zhe gently patted the woman's shoulder. \"I'm sorry, are you alright?\"\n\nThough the kick was instinctive, the narrowness of the ancestral hall's side door prevented him from using his full strength. He estimated the impact to her abdomen was minimal, unlikely to cause internal bleeding. He was always precise in such matters. As a schoolboy, he could beat up bullies until they were black and blue, yet perfectly control the injuries to only superficial bruises, never escalating the situation. This was no different.\n\nAfter a moment, the gorgeously adorned woman struggled to her feet from the stone path, leaning against the wall and gasping for breath.\n\n\"You… why did you hit me?\" Her voice was weak from the abdominal pain, but surprisingly, she didn't lash out.\n\n\"I'm truly sorry. You appeared so suddenly behind me without a sound, I thought it was one of those… unnatural Hejia villagers trying to sneak up on me. I overreacted,\" Ning Zhe apologized sincerely.\n\n\"It's alright… alright…\" The woman shook her head repeatedly. \"I understand. In a place like this, anyone would be on edge. It's not your fault, not your fault…\"\n\nNing Zhe noticed her complex expression: her pale face betrayed her unease in this strange place; her slightly pursed lips reflected fear of being attacked by the young man, but more prominently, was the relief and joy of seeing another living person after being terrified for so long.\n\n\"This woman has a weak personality and lacks decisiveness. After being beaten, she showed no hostility or aversion, instead actively excusing my mistake and trying to win my favor,\" Ning Zhe quickly analyzed her character traits.\n\nHe turned to Zhang Yangxu, who had reached the side door. \"Hello, Mr. Zhang, I didn't expect to see you here. My name is Ning Zhe, a high school senior at Taoyuan No. 1 Middle School.\"\n\n\"Hello, I'm Zhang Yangxu,\" Zhang Yangxu replied indifferently.\n\n\"I'm Mr. Zhang's legal counsel, Xie Sining,\" the woman behind Zhang Yangxu said, her tone considerably more cheerful.\n\nZhang Yangxu's gaze quickly swept over the woman leaning against the wall and Ning Zhe, slightly surprised. \"Mrs. Bai is here too… Ning Zhe, is it? Do you know me?\"\n\n\"Who doesn't know you, Mr. Zhang? You're too modest. At least, few people in Qinzhou haven't heard of you,\" Ning Zhe said lightly, smiling. \"Thanks to you, I was able to take leave from school to return home. I thought I'd become a demolition beneficiary, comfortably collecting rent, but then I woke up in this… ghostly place.\"\n\nZhang Yangxu nodded slightly. He hadn't expected Ning Zhe to be a local from Gubei Town.\n\nNing Zhe gestured towards the woman leaning against the wall. \"You mentioned Mrs. Bai. Is this lady's surname Bai? Do you know her, Mr. Zhang?\"\n\nZhang Yangxu remained silent; his legal counsel, Xie Sining, promptly introduced her. \"This is Feng Yushu, Mrs. Bai Fugu, the largest shareholder of the 'New Home' Group. Mr. Bai and Mr. Zhang both have their sights set on this area of Gubei Town, both vying for the development contract. We are currently competitors.\"\n\n\"I see,\" Ning Zhe smiled slightly at Xie Sining. \"But in a place like this, business relationships seem meaningless.\"\n\nZhang Yangxu smiled. \"Indeed, they are meaningless.\"\n\nIn the outside world, Zhang Yangxu might be a tycoon worth hundreds of billions, a prominent figure with extensive connections. But in this isolated village, a place of strange occurrences and supernatural events, he was just an overweight, balding middle-aged man.\n\nThis is why he was willing to speak to Ning Zhe on equal terms. Here, Ning Zhe wasn't just a high school student burning the midnight oil, but a strong, energetic young adult male.\n\nPlease… collect… 6…9… books…\n\n\nNing Zhe approached Feng Yushu, extending a hand to help her up. \"Madam, how did you get here?\"\n\nFeng Yushu, suppressing her abdominal pain, brushed off the dust from her dress. \"My husband, daughter, and I came to Gubei Town. He's always busy with work and rarely home. We wanted to take advantage of his on-site bidding to have a family outing, relax in the countryside, see the scenery, but then…\"\n\nThen, the unexpected happened, dragging her into this strange place called Hejia Village.\n\n\"Where are your husband and daughter? Did they come here too?\" Ning Zhe pressed.\n\nFeng Yushu shook her head. \"No. I searched for them in the village yesterday, violating several taboos, but I couldn't find them. It seems I'm the only one who wandered in.\"\n\n\"Alright, I understand.\" Ning Zhe nodded with satisfaction. He now had a basic understanding of everyone present.\n\nEncountering living people in such a place was good, but beneath the surface of mutual support lay a less harmonious reality.\n\nBehind Zhang Yangxu, Xie Sining's phone vibrated slightly. She subtly unlocked the screen and glanced at it—a text message from someone labeled 'Mr. Zhang':\n\n\"Ning Zhe was the one who found the almanac. He arrived before all of us. Be careful of him.\"\n\n(End of Chapter)\n"
13
+ },
14
+ {
15
+ "title": "第4章 门和病",
16
+ "translated_content": "Chapter 4: Doors and Sickness\n\nAfter discussion, the four unanimously agreed to wait a little longer at the ancestral hall. If other living people still existed in Hejia Village and were aware of the \"taboos,\" they would certainly come to the ancestral hall to consult the almanac and check the auspiciousness and inauspiciousness of the day.\n\nTonight, something unknown happened. Every household in Hejia Village had its doors shut and windows closed; not a single person came out to check the daily fortune at the ancestral hall.\n\nThis was highly unusual, and unusualness implied something uncanny.\n\n\"Do you have any leads?\" Zhang Yangxu asked during the wait.\n\n\"None,\" Ning Zhe shook his head. \"The He family members would come to the ancestral hall every night at midnight to consult the almanac. Today, they didn't. Either they no longer care about good or bad fortune, or they have other ways of knowing the daily fortune. Or... there's some danger inside the ancestral hall today, preventing them from coming.\"\n\n\"Oh?\" Zhang Yangxu was curious. \"Is that so?\"\n\n\"I don't know, it's just speculation,\" Ning Zhe shrugged.\n\n\"Dan...danger?\" Hearing that there might be danger in the ancestral hall, Feng Yushu's face turned pale. She was already a devout Buddhist, and after witnessing the eerie nature of the snake god in Hejia Village, she was even more timid, walking on eggshells in everything she did.\n\nFeng Yushu looked at the deceased's memorial tablets and the snake god statue on the lotus platform with lingering fear, then looked at Ning Zhe with a pleading gaze, suggesting, \"Otherwise, let's go out and wait outside the ancestral hall... Staying in front of the snake god continuously might be somewhat offensive?\"\n\n\"I agree,\" Ning Zhe nodded, shifting his gaze to Zhang Yangxu and Xie Sining. \"What do you think?\"\n\n\"Makes sense. Ancestral halls aren't places for outsiders to enter, let alone stay for a long time,\" Xie Sining agreed. \"Mr. Zhang, should we go out?\"\n\nZhang Yangxu silently glanced at Ning Zhe and nodded. \"Let's go.\"\n\nThe four left the lotus platform where the snake god was enshrined and waited under the eaves outside the ancestral hall's main gate.\n\nThere wasn't much to talk about among several strangers. Xie Sining suggested that they could share their experiences of being drawn into Hejia Village; perhaps they could find something in common or a clue to leaving.\n\nFeng Yushu spoke first: \"Yesterday... or should I say the day before yesterday, my husband, daughter, and I stayed at a hotel in Gubei Town. Because he had the habit of working alone at night, we booked three rooms—one for each of us.\"\n\n\"Around 7 pm, I made some coffee, preparing to take it to my husband's room... But after opening his door and stepping across the threshold, what appeared before me wasn't a hotel room, but a narrow alley paved with flagstones.\"\n\nFeng Yushu recounted with lingering fear, \"At that time, the stainless steel doorknob in my hand had become an old brass latch. Behind me was a low, stone-built and tile-roofed house. The room inside was empty... as if I had just walked out of this door.\"\n\nZhang Yangxu nodded slightly. \"My situation is similar. My car was parked at a gas station outside Gubei Town. The driver went to the restroom, and I asked Sining to buy me a pack of cigarettes, but she didn't come back for a long time and didn't respond to messages. I had to open the car door to look for her. The moment I opened the car door and got out, I arrived here.\"\n\nXie Sining continued, \"I bought the cigarettes Mr. Zhang wanted at the gas station's convenience store, but after pushing open the door and leaving the store, my feet were no longer on the concrete pavement of the gas station, but on the stone slabs of the streets of Hejia Village.\"\n\n\"Mine was more direct,\" Ning Zhe nodded. \"I returned to my hometown, opened the door to my old house, and then I was here.\"\n\nZhang Yangxu's eyes narrowed slightly, thoughtful.\n\nWas it coincidence? Or inevitable? Whether it was the door of the old house, the hotel room door, the convenience store's glass door... even the car door, the four of them arrived in Hejia Village through different means, but all related to \"doors.\"\n\nNing Zhe's expression remained calm, but he thought, \"It's a pity that Lin Zhiyuan is already dead; otherwise, I could ask him how he got here, if it was also through a door?\"\n\nSuddenly, a dark shadow appeared at the edge of Ning Zhe's vision, fleeting quickly.\n\n\"Someone in the alley across the street, he's running,\" Ning Zhe immediately took out his phone, turned on the flashlight, and pointed the light source at an alley across the street.\n\nThe phone's built-in flashlight didn't have a long range. Ning Zhe did this to quickly and directly convey the coordinates of the shadow to others. Verbal descriptions were too inefficient and prone to distortion.\n\nBut strangely, the black figure, who had been trying to run away, stopped after seeing Ning Zhe's flashlight.\n\nThe person walked two steps toward them, and then a white light lit up from his hand—another flashlight.\n\n\"Great, it's a living person,\" Feng Yushu breathed a sigh of relief. Her heart had almost leaped out of her chest.\n\nUpon closer inspection, there were not one but two people in the alley across the street. A man and a woman, two young people, who seemed to be college students.\n\n\"Hello, my name is Gu Yunqing,\" the young man introduced himself first, then introduced the young woman beside him, \"This is my senior sister. We are both students of Qinzhou Medical University.\"\n\n\"My name is Ye Miaozhu,\" Gu Yunqing's senior sister introduced herself. \"Were you also unexpectedly drawn here?\"\n\nNing Zhe nodded.\n\nAfter a brief exchange, they exchanged information and identification documents. Gu Yunqing and Ye Miaozhu both presented their internship certificates.\n\nPlease... collect 6...9...books....!\n\nGu Yunqing and Ye Miaozhu were both intern doctors. Qinzhou Medical University had a tradition of sending students to rural clinics in remote areas for internships to gain experience, similar to teaching in rural areas. Their internship location was a designated medical point in Gubei Town.\n\nLike Ning Zhe and the other three, Gu Yunqing and Ye Miaozhu arrived here after opening the clinic and pharmacy doors, respectively.\n\n\"It's definitely related to doors,\" Ning Zhe's conjecture became more certain. \"If we all entered Hejia Village through 'doors,' does this mean that somewhere in this village, there's also a door that can let us leave this eerie world and return to reality?\"\n\n\"Uncertain, but possible,\" Zhang Yangxu acknowledged his guess.\n\nZhang Yangxu then asked Ye Miaozhu, \"You should know about the auspiciousness, inauspiciousness, and taboos. But why didn't you enter the ancestral hall to consult the almanac and instead hid in the alley across the street?\"\n\nYe Miaozhu shook her head. \"We didn't dare to go in.\"\n\nGu Yunqing also said, \"The He family members usually come to the ancestral hall on time every day to consult the almanac and check the auspiciousness and inauspiciousness. But today, none of them came. Do you know why?\"\n\n\"Why?\" Feng Yushu hurriedly asked.\n\nGu Yunqing took a deep breath and said, \"I overheard two very old villagers chatting... They said the snake god is sick; today is its illness day.\"\n(End of Chapter)\n"
17
+ }
18
+ ]
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ nest_asyncio
2
+ playwright
3
+ groq
4
+ fake-useragent
5
+ google-generativeai
6
+ gradio
7
+ tenacity
scraped_chapters.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "title": "第1章 黄历",
4
+ "content": "第1章 黄历\n2024-11-18\n第1章 黄历\n农历四月廿三,芒种。\n屋外下着雨,宁哲走进供奉着蛇神的祠堂,翻开钉在蛇神雕像舌头上的老旧黄历,查看今日吉凶:\n【宜:】\n【忌:出行、安葬、行丧、祭祀】\n“忌出行……今天的规则是不能出门么?”宁哲端详着面前的黄历,将上面的内容牢记于心。\n黄历的内容是在这个与世隔绝的小山村生存下去的关键。\n这个村子名叫何家村,位于一处四面环山的盆地中央,与世隔绝。整个村子被一条河分割成东西两半,由三座拱桥连接。\n何家村的人都信蛇神,家家户户都供着蛇神的画像。蛇神的形象被描绘为一条长着一对弯曲长角的青玉大蛇,一尊樟树根雕的蛇神木像被供奉在村南头的宗族祠堂里,被何家村先人的牌位簇拥着,也就是宁哲现在所在的地方。\n蛇神雕像的舌头上钉着一本老旧的黄历,何家村人每天子夜最重要的事情,就是来到祠堂里翻一页黄历,查看今日吉凶,然后才能安心入睡。\n据村里人讲,黄历上的吉凶是蛇神透露的天机。\n黄历每天给出的宜与忌都是随机的,知道其内容就能趋吉避凶,做今日宜做的事情会走好运,相对应的犯了忌就会走霉运,屡次犯忌会倒血霉,犯忌太多太重的人甚至会离奇暴毙。\n对于这点,宁哲身有体会。\n他昨天刚进村时,就因为不清楚这里的规则无意间触犯了昨日吉凶中‘见生’与‘除虫’的忌讳,导致自己倒霉了一整天:\n走路被石板路的缝隙绊倒、路过房檐下被掉落的瓦片砸中后脑勺、刚想出门又下起了瓢泼大雨……够呛熬到半夜,遗世而独立的小山村即将迎来新的一天。宁哲蹲守在祠堂门口,零点一过便立刻翻开黄历,查看今日吉凶。\n宁哲再次确认了一遍黄历的内容:\n【宜:】\n【忌:出行、安葬、行丧、祭祀】\n“安葬、行丧、祭祀都好理解,但‘出行’具体是什么意思?是指出远门吗,还是只要离开了房屋等建筑物,到了外界就算?另外……”\n宁哲心生疑惑,视线略微上移,落在了‘宜’字后面的空白上:\n“为什么黄历上的内容只有忌,没有宜?”\n今日诸事不宜?\n他正疑惑时,祠堂外传来了细碎的脚步声,应该是有村民来查看黄历了。宁哲离开供着蛇神雕像的莲花台前,走向祠堂的侧门,准备离开。\n何家村的村民不是什么正经人,可以的话,宁哲并不想跟他们多接触。\n但是身后的烛火微微摇晃,宁哲来到祠堂的侧门沿,心生犹豫。在无法确定‘出行’忌讳具体含义的情况下,他不是很敢贸然出门,昨天已经倒霉够了。\n“零点已过,今日吉凶已经刷新,如果仅是离开房屋在村内活动也算‘出行’的话,那么离开自己家,前来祠堂查看黄历的村民此时此刻就已经犯了忌。”宁哲心中想道。\n蛇神是宽宏大量的,无知者初次犯忌只会倒一些无关紧要的小霉,不会伤及性命。也就是说只要观察来到祠堂的村民是否倒霉,应该就能大致判断出他们有没有触犯‘出行’忌讳了。\n想到这里,宁哲没有急着离开,他侧身来到一根贴着墙的柱子旁边,柱子的颜色纯黑,上面挂着深红色的旧绸帘子,昏暗的烛台在帘子下方微微摇晃。宁哲将自己藏在帘后,透过烛光的缝隙观察着祠堂的正门。\n且轻且闷的低沉脚步夹杂着淅沥的水声,一双白色的运动鞋踩过街道上的水坑,来到了祠堂门口。\n“……”宁哲双眼死死盯着着那个从门外走进的人影,瞳孔因震惊而微微收缩。\n那是一个身材健壮的青年男子,看上去不到三十岁,简单的背心搭配着适合跑动的宽松中裤,粗壮的手臂和脚上的运动鞋一起说明了这是个热爱锻炼的家伙,然而就是这样一副平平无奇的穿着打扮,却令宁哲不寒而栗。\n“自从我被卷入何家村,我在这里见到的每一个村民都是怪异的样子,他们穿着裁剪过时的麻布衣服,用着原始的牛拉犁耕田,说话也带着浓重的客家口音……路上和屋里甚至连一盏电灯都没有。”\n“如果不是这里诡异的规则,以及村民们那像皮影人偶一样僵硬的动作,我甚至怀疑过自己是不是穿越到了古代。”\n但就是在这样一个诡异的‘古代村庄’,他却见到了另一个穿着现代着装束的人。\n“他是谁?是和我一样被卷入这个诡异之地的吗?这里除了我还有其他活人?”\n种种疑惑填满了宁哲的脑海,但谨慎的性格让他没有轻举妄动,将呼吸放缓,竭力控制着自己不发出任何响动,宁哲双眼一眨不眨地注视着那个身穿背心运动鞋的健壮男子走进祠堂,径直来到内堂,站定在蛇神��像前。\n“他的目标也是黄历。”宁哲心中明了。\n这名背心男子很可能和自己一样,是偶然卷入这个诡异村庄的外地人,甚至可能也无意间触犯过蛇神禁忌,他深夜来到祠堂的目的也许也和自己一样——翻阅黄历,查看今日吉凶。\n背心男子抬头注视着挂在蛇神舌头上的老旧黄历,面露疑惑表情,宁哲知道他在疑惑什么:\n“他以为自己是第一个来到祠堂的人,黄历还没有被翻过,还停留在昨天。因此他现在可能在疑惑,黄历上的内容为什么和自己昨天触犯的忌讳对不上。”\n但实际上,早来一步的宁哲已经将黄历翻到了今天,当然对不上。\n背心男子在蛇神雕像前踌躇片刻,最终还是向黄历伸出了手。他准备翻阅黄历了。\n“是了,这本黄历上没有公元日期,使用的是农历,用惯了公制历法的现代人很难根据农历日期判断上面显示的是不是今天。”宁哲大致猜到了现在发生的情况。\n这情况其实只要打开手机看一眼就能解决,手机厂商一般都会在日历界面同时显示公历和农历,但或许是因为黄历内容与自己实际触犯的忌讳内容对不上,错乱的事实让这名背心男子慌了神,极度的紧张之下,他没能冷静下来想到这一点。\n请...您....收藏6...9...书....吧....!\n刑不可知则威不可测,虚无缥缈的规则,与近在咫尺的死亡,在这种环境下,很少有人能时刻保持理智。\n宁哲屏息凝神,双眼死死盯着男子那只伸向黄历的手:“已经翻到今天的黄历如果被再次翻页,难道会显示明日吉凶?”\n他没有丝毫出去提醒对方的意思,宁哲现在只好奇一件事:在今日查看明日吉凶,蛇神会允许吗?\n这个问题很快就得到了答案。\n背心男子短粗的手指将黄历捏起一页翻开,便要将写着今日吉凶的这一页纸张挂在钉子上。但这一页纸还未挂上去,几乎是在他翻开黄历的不到一秒之后,一个沉闷的响声在祠堂中响起。\n那是人的肉体与黄土地面碰撞的声音,他没能将黄历成功翻到明天,整个人如脱力般瘫倒在了地上,一动不动。\n“看来答案是不允许。”宁哲心中自语。\n尽管还没有实际检查过尸体,但一种莫名的预感出现在宁哲心中,就像是谁给他的暗示。\n他觉得,这个男人死了。\n清冷的晚风从大门外吹了进来,被翻开的那一页黄纸迟迟没有落回原位,像一片枯叶飘飞在风中簌簌作响,又似一只翅膀深黄的蝴蝶翻飞在这静谧的祠堂中,‘明日吉凶’在蝴蝶的翅膀下依稀可见。\n宁哲深吸一口气,转过视线不去看黄历,但也不准备离开。\n背心男子的暴毙不是运气原因,而是触犯了某种独立于‘今日吉凶’这种忌讳之外的隐藏死忌。\n“类似表规则下的潜规则吗?”宁哲心中一边思索着,一边快步从帘后走出。\n祠堂里刮着凉爽的穿堂风,宁哲用麻利的手脚将背心男子的尸体从蛇神雕像前拖走,藏在了被大红桌布覆盖的供桌下下面。刚死的人短时间内不会有什么气味,尸体藏在这里应该不会暴露。\n宁哲整理好桌布,快步离开供桌,重新藏回了靠墙的帘子后面。\n“这个村子里除了我和这男人外应该还有其他活人,他们可能也会来到祠堂,翻阅黄历。”\n宁哲没有被发生在眼前的诡异死亡吓破胆,他仍清楚地知晓自己现在应该做什么——通过观察从外面来到这里的其他人倒霉与否,或许就能判断出今日吉凶里‘出行’忌讳的具体含义。\n黄历的内容是在这个与世隔绝的小山村生存下去的关键。\n(本章完)",
5
+ "url": "https://69shuba.cx/txt/84533/39367657"
6
+ },
7
+ {
8
+ "title": "第2章 张养序",
9
+ "content": "第2章 张养序\n2024-11-18\n第2章 张养序\n搬运尸体的时候,宁哲顺手摸走了背心男子兜里的手机,黑色的手机壳里夹着一张百元钞票,但没有身份证和驾驶证之类能够确定身份的证件。\n宁哲不知道背心男子的锁屏密码,用他尸体的指纹解锁了屏幕。解锁后,宁哲做的第一件事便是进入系统设置,将自动锁定设置成‘永不’,随后才开始翻看其男子手机里各种的信息。\n——人在死亡的约三小时后,其细胞内的微弱生物电便会完全消失,这时候,手机等电子设备就无法识别他的指纹了。\n背心男子的微信昵称叫做‘AAA巧高里健身俱乐部-教练志远’,实名认证是‘林*远’。\n林志远的微信好友很多,多是备注‘客户’或是‘学员’的女性用户,在与一名姓蔡的女客户的最近聊天中,林志远提到自己最近要回趟家里看看老人,会让同事顶班几天。\n对方回了个‘想你’的表情包。\n翻看朋友圈,林志远发最后一条朋友圈的时间是在昨天上午,内容为‘服务站的饭��价格太贵了,又贵又油腻,吃一顿要减脂一个月才能缓过来’,配图是一辆停在充电桩旁边的N1轿跑。\n“林志远昨天上午还在高速服务站上吐槽饭菜油腻,说明他进入村子的时间至少在那之后。”宁哲回忆起自己进入何家村的情形,他是早上7点被卷入这里的,比林志远早了几小时。\n确认流量打开后,宁哲给那位姓蔡的女客户发了一句‘在吗?’。\n消息左侧显示红色叹号,发送失败。\n“果然又失败了。”宁哲并不感到意外。\n查看通话记录和聊天界面,可以看见林志远给备注为父母和女朋友等的联系人每人都打了好几次电话,运营商的紧急呼救功能也用过了,但这些联系外界的尝试无一都失败了。\n宁哲对此并不意外,因为自己也一样,自从进入何家村,他便完全丧失了与外界的所有联系,4G信号显示满格,但却连一条消息都发不出去、接收不到。\n正常人对这种情况或许会感到沮丧,但宁哲并不是什么正常人,不知出于什么心态,宁哲退出微信,用林志远的手机拨打了自己的电话号码。\n嗡—嗡——\n大腿处传来嗡嗡的振动,他口袋里的电话被拨通了。\n这时,祠堂外传来了脚步声。\n宁哲挂断电话,将林志远的手机保持在亮屏状态塞进外套口袋,集中精神聆听着门外的脚步。\n之前林志远进门时,他脚上的气垫运动鞋踩在黄土地和石板路上的声音十分沉闷,而这次的脚步则是清脆而响亮的,硬质鞋跟敲打地面的声音踢踢踏踏,不止一个声音,是两个。\n宁哲的视线牢牢注视着门口,从那里走进来的是一名西装革履的中年男子,以及一名穿着OL制服的长发女性,做工考究的皮鞋和高跟鞋上沾了几点黄色的泥水。\n“怎么会是他?”宁哲有些惊讶。\n他认识那名中年男子,虽然对方未必认识他。\n宁哲是从新闻里认识这个男人的,他的名字叫做张养序,是琴州最大的房地产开发企业‘新世界’集团的一把手。宁哲这次离开学校返回农村老家,便是因为张养序的企业有意向在附近拿地,要在他的家乡小镇‘古碑镇’开发一处新的园区,宁哲家的宅子便在张养序企业的预计拆迁名单里。\n但家里的外公外婆都不识字,所以才需要他这个还在念书的高中生请几天假,回一趟家。\n“张养序居然也被卷入这个地方了。……是了,我之前在地方台的新闻里看到过,‘新世界集团’的高管近几天就要来古碑镇实地考察,和地方敲定拿地合同,想不到居然是总裁亲自来。那旁边的女人应该就是张养序的秘书或是助理之类人物。”\n凭借破碎的信息,宁哲大致推出了事情的经过:“林志远是回乡探亲被卷入这里。我是回家帮外公外婆看拆迁合同的路上被卷入。而张养序和那个女人,则是来古碑镇实地考察的时候被卷入这里的么?”\n这个名叫何家村的诡异村子,与自己的家乡古碑镇,存在什么联系吗?\n疑惑中,宁哲看着张养序与穿着OL制服的女人一起走到了供奉着蛇神雕像的莲花台前。\n张养序一只手拿出手机打开手电筒,一只手按住被风吹得簌簌飞舞的黄历纸张,细细端详着上面的内容。很快,他便产生了与林志远之前一样的疑惑,黄历的内容与自己昨天触犯的忌讳对不上。\n他侧首瞥了一眼手机屏幕,眉头顿时皱了起来:“农历四月廿三,上面显示的就是今天的内容,黄历被翻过了。”\n张养序的声音低沉,带着一点点的烟嗓,语气沉着而严肃:“这里有人来过。”\n旁边的女人低声问:“是村民吗?”\n请...您....收藏6...9...书....吧....!\n张养序摇了摇头:“我们来的时候已经注意过了,整条街的房门都被从里面反锁,今晚没有任何一个村民出过门。”\n“不是村民?那是……?”女人的声音疑惑,又有些不确定:“难道被卷入这里的除我们之外,还有其他人?”\n“有可能。”张养序没有否认。\n“……他刚才说,他们两人一路走来查看了整条街的房门反锁情况。如果是这样的话?”宁哲简单心算了下时间,一块石头顿时落地了:“看来,如果只是离开房屋在村内街道上行走,是不会触犯‘出行’忌讳的。”\n出行的忌讳另有所指。\n确定了今日吉凶,宁哲没有进一步与张养序二人接触的意思,在这种环境下,没有什么人值得信任,他藏身的柱子后面几步远便是祠堂的侧门,是时候从那里离开了。\n宁哲双目警惕地看着站在蛇神雕像前讨论的张养序二人,背对着侧门,放轻脚步缓缓后退,冷冽的晚风从门外灌进来,将他的脊背吹得冰凉。\n还未等退到门外,忽然,一声带着哭声的惨叫从宁哲背后传出。\n“你是谁……”\n(本章���)",
10
+ "url": "https://69shuba.cx/txt/84533/39367658"
11
+ },
12
+ {
13
+ "title": "第3章 冯玉漱",
14
+ "content": "第3章 冯玉漱\n2024-11-18\n第3章 冯玉漱\n似哭似笑的诡异惨叫令宁哲浑身顿时一激灵,大脑还没反应过来,身体便下意识地转到背后,朝声音传来的方向一脚踢出。\n定神一看,那声音的主人已被踢翻在地,双手捂着腹部痛苦地蜷缩着。\n“居然是活人。”宁哲松了口气。\n身后祠堂里,被惊动了的张养序和那名女OL已经朝侧门这边走过来了。\n自知已经暴露的宁哲不再想着离开,目光快速扫过这名突然出现在门外,又被自己踢翻在地的人。\n这是一名外表年龄大约在3~40岁左右的中年女性,但这个估计并不一定很准,因为她身上佩戴着不少珠光宝气的名贵首饰,衣着更是华丽鲜亮。\n她脖子上的珍珠项链颗颗珠圆玉润,左手一只晶莹剔透的白玉手镯,在柜台里的标价可能比宁哲家老宅的拆迁款还要高。乌黑柔亮的长发被一支金镶玉的梧桐发簪精心盘起,雪白细嫩的皮肤没有丝毫皱纹,一看就没怎么晒过太阳。右手一串包浆透亮的菩提子,可能还信佛。\n一身绛紫色的束身长裙,腰上缚着一圈绣有精美蕾丝花边的粉紫腰封,细致的设计与裁剪将一具丰盈完满的熟女娇躯凸显得淋漓尽致。圆润的鹅蛋脸上是一张美艳如出水芙蓉般的雍容面容,标致的五官端庄而淑雅。\n……如此种种,俨然是一名常年养尊处优的清闲贵妇人,保养得十分到位。生活条件好的人总是衰老得很慢,宁哲也不敢肯定这贵妇究竟多少岁了,看着像三十,实际可能有四十,甚至可能已经年逾古稀。\n听见身后张养序的脚步逐渐近了,宁哲轻轻拍拍妇人的肩膀:“不好意思,你没事吧?”\n刚才那一脚虽是下意识踢出,但碍于祠堂侧门的窄小,宁哲并没能使出全力,他感觉这一脚最多也就让对方的腹腔受到一些不算太大的冲击,不至于伤到内脏导致内出血的程度。\n他对这类事情的计算一向很准,早在上小学时宁哲便可以做到把招惹自己的熊孩子一个个毒打至鼻青脸肿,但又精确地将每个人身上的所有外伤都完美控制在刚刚好是皮外伤的程度,没有一次将事情闹大过。这次也不出所料。\n片刻,一身珠光宝气的雍容贵妇人便挣扎着从石板路上爬了起来,捂着肚子靠在墙上呼呼地喘着气。\n“你,怎么见面就打人呢…”贵妇人的声音因腹痛而有些发虚,但却出乎意料的没有对他恶言相向。\n“实在不好意思,你没有声音突然出现在我后面,我还以为是那些人不人鬼不鬼的何家人在偷我背身,一时反应过激了。”宁哲非常诚恳地连连道歉。\n“没事没事…”妇人连连摇头:“我明白的,在这种鬼地方谁都会神经紧绷,不怪伱,不怪你…”\n宁哲注意到,对方看着自己的神色十分复杂,苍白的面孔透露着对这片陌生的诡异之地的不安,微抿的嘴角是对刚才殴打她的少年的后怕与恐惧,但更多的,却是担惊受怕许久之后,终于见到其他活人的欣喜与安心。\n“这个女人的性格懦弱,缺乏主见,被我殴打之后非但没有表现出敌意或是嫌恶,反而积极主动地为我的错误开脱,竭力示好,试图拉我的好感。”宁哲在脑中快速解剖了这名贵妇人的性格特征。\n随即他转过身,对已经走到侧门门口的张养序打了声招呼:“你好,张总,没想到能在这里见到你。我叫做宁哲,是桃源市一中的一名高三学生。”\n“你好,我是张养序。”张养序不咸不淡地说。\n“我是张总的法律顾问,我叫谢思凝。”跟在张养序身后的女人的语气则相对欣快一些。\n张养序的目光从倚在墙边的妇人和宁哲身上快速扫过,有些惊讶:“白夫人居然也在这里……宁哲是吗?你认识我么?”\n“天下谁人不识君?张总谦虚了,至少我们琴州人没几个是不认识你的。”宁哲轻描淡写地微笑道:“还是沾你的光,我才会从学校请假回老家,本来还想着这下能变成拆迁户整天美美收房租了,可谁知道一睁眼,就来到了这么个鬼地方。”\n张养序微微点头:“原来如此。”\n他也没想到,宁哲居然是古碑镇的本地人。\n宁哲用下巴指了指靠在墙边的贵妇人,接着问道:“你刚才说白夫人,这位女士姓白么?张总你认识她?”\n张养序没有出声,站在他身后的法律顾问谢思凝适时地开口介绍道:“这位是‘新家园’集团的最大持股人白复归,白先生的夫人,冯玉漱女士。白先生与张总同时看中了古碑镇这块区域,两方都想拿下这片地区的开发合同,我们两家目前是竞争关系。”\n“原来如此。”宁哲对谢思凝微微一笑:“但��这种地方,生意场上的关系好像没有什么意义。”\n张养序也笑了:“的确没什么意义。”\n在外界他张养序可能是身价数千亿,在社会各界都拥有拥有广泛人脉的风云人物,但在这个与世隔绝的小村庄,怪力乱神的诡异之地,他不过是一个身材发福,头顶也有些稀疏的中年男人罢了。\n这也是他愿意和宁哲平等对话的原因。\n在这里,宁哲不是一个每天都刷题到深夜的卷王高中牲,而是一个身强体壮,精力旺盛的成年男性。\n请...您....收藏6...9...书....吧....!\n宁哲来到墙边,向簪金戴玉满身贵气的冯玉漱伸出手,将她拉了起来:“夫人你是怎么来到这儿的?”\n冯玉漱忍着腹痛拍拍衣裙上的尘土,有些拘谨地说道:“我是和丈夫还有我女儿一起来到古碑镇的,他平时一直忙工作,很少在家里。这次原本是想趁着实地投标的机会,一家人难得聚在一起来乡下透透气,玩一玩看看风景,但没想到……”\n没想到异变忽然发生,将她拉进了这个名叫何家村的诡异之地。\n“那你的丈夫和女儿呢?他们也来到这里了吗?”宁哲追问道。\n冯玉漱摇了摇头:“没有,我昨天在村里找了很久,触犯了好几次忌讳,都没有找到他们,看来误入这里的就只有我。”\n“好的,明白了。”宁哲满意点头,这样一来,他对面前几人的情况就都有了基本的了解。\n能在这种地方遇到活人总归是一件好事,但抱团取暖的和谐表象之下,实际的情况却远没有那么和谐。\n张养序身后,法律顾问谢思凝的手机微微振动,她不动声色地解锁屏幕快速瞟了一眼,上面是备注‘张总’发给她的一条短信:\n“黄历是宁哲翻的,他比我们所有人都早到,小心他。”\n(本章完)",
15
+ "url": "https://69shuba.cx/txt/84533/39367659"
16
+ },
17
+ {
18
+ "title": "第4章 门和病",
19
+ "content": "第4章 门和病\n2024-11-18\n第4章 门和病\n商议之后,四人一致认为应该再在祠堂稍作等待,如果何家村里还存在着其他活人,并且知道‘忌讳’的存在,那么他们就一定会来祠堂翻阅黄历,查看今日吉凶。\n今晚不晓得发生了什么事,何家村里家家关门,户户闭窗,没有一户人家出门来祠堂查看今日吉凶。\n这件事情很反常,而反常便意味着诡异。\n“你有什么头绪吗?”等待途中,张养序问道。\n“没有。”宁哲摇头道:“何家人每夜子时都会来祠堂翻看黄历,今天却没有来,要么他们已经不在乎趋吉避凶了,要么他们有其他的途径知道今日吉凶。要么就是……今天的祠堂里面存在着某种危险,让他们不敢来。”\n“哦?”张养序有些好奇:“是这样的吗?”\n“我不知道,只是猜测而已。”宁哲摊手。\n“危…危险?”一听祠堂里可能有危险,冯玉漱的整张脸都白了,她本就信佛,在何家村里亲眼见识过蛇神的诡异之处后就更是战战兢兢,做什么事情都如履薄冰。\n冯玉漱心有余悸地看了看莲花台上的死者牌位和蛇神雕像,后又带着求助的眼神望向宁哲,提议道:“不然,我们先出去,在祠堂外面等吧……一直在蛇神面前呆着不走,会不会有些冒犯?”\n“我觉得也是。”宁哲表示赞同,将目光移向张养序和谢思凝:“你们觉得呢?”\n“有道理,祠堂这种地方本就不是外人能进的,更何况是在这里久待。”谢思凝也觉得是这样:“张总,我们要出去吗?”\n张养序默默看了宁哲一眼,点了头:“走吧。”\n四人从大门离开了供奉着蛇神的莲花台前,站在祠堂大门外的屋檐下等候。\n几个陌生人之间没什么可聊的话题,谢思凝提议众人可以彼此交流一下各自被卷入何家村的过程,或许可以从中找出什么共同点,或是离开这里的线索。\n冯玉漱首先说道:“昨天…应该是前天了,我和丈夫还有女儿在古碑镇的一家酒店住下,因为他有晚上独自工作的习惯,所以我们开了三间房,他和我还有女儿各自一间。”\n“大约在晚上7点左右,我泡了点咖啡,准备送到丈夫的房间……但在打开他的房门,跨过门框后,出现在我面前的却不是酒店房间,而是一条铺着青石板的狭窄小巷。”\n冯玉漱心有余悸地说道:“当时,我手里握着的不锈钢门把手变成了一个老旧的黄铜门闩,身后是一处石砌瓦盖的低矮民房,屋子里空荡荡的……就好像我刚从这扇门里走出来一样。”\n张养序微微点头:“我的情况也差不多,当时我的车正停在古碑镇外的一处加油站里,司机去上厕所了,我让思凝去帮我买包烟,但她却迟迟没回来,发消息也不回,我只好打开车门出去找她。打开车门下车的那一瞬间,我来到了这里。”\n谢思凝接��道:“我在加油站的小卖部里买到了张总要的烟,但在推开门,离开小卖部后,我脚下就已经不是加油站的混凝土路面了,而是铺在何家村街道上的石板。”\n“我更直接一点。”宁哲点头道:“我回到家乡,推开老宅的大门,然后就到了这里。”\n张养序眼神微凝,若有所思。\n是巧合吗?还是必然?不管是老宅的大门、酒店的房门、百货铺的玻璃门……甚至是轿车的车门,四人来到何家村的过程虽有不同,但都与‘门’有关,\n宁哲的表情依然平静,心中想道:“可惜林志远已经已经死了,不然还能问问他是怎么进到这里来的,是不是也是通过了某扇门?”\n忽然,一角黑影出现在了宁哲的视野边缘,转瞬即逝。\n“对面巷子里有人,他要跑。”宁哲毫不犹豫地掏出手机,打开手电筒,将光源指向街对面的一条小巷。\n手机自带的手电筒照明距离并不远,宁哲这样做只是为了以最直接快速的方式将那个黑影的坐标信息传递给其他人,用言语描述的效率太低,而且容易失真。\n但古怪的是,刚才还在试图跑走的黑色人影在见到宁哲手中打开的手电筒后,反而停下了脚步。\n那人朝这边走了两步,随后,一点白光从他的手中亮起,也是一个手电筒。\n“太好了,是活人。”冯玉漱顿时松了一口气,刚才她的心都快要跳出胸口。\n走近后才发现,街对面的巷子里不止一个人,而是两个。一男一女,两个青年,看上去年纪都不大的样子,似乎还是大学生。\n“你们好,我叫做顾云清。”男青年首先自曝姓名,随后介绍了自己身边的那名女青年:“这位是我的学姐,我们都是琴州医科大学的学生。”\n“我叫叶妙竹。”顾云清的学姐自我介绍道:“伱们也是被意外卷入这里的吗?”\n宁哲点了点头。\n经过一番交流,众人交换了彼此的情报以及能够证明身份的证件,顾云清和叶妙竹都出示了自己的实习证。\n请...您....收藏6...9...书....吧....!\n顾云清和叶妙竹两人都是实习医生,琴州医大一直都有让学生下乡去偏远地方的小诊所实习积累经验的传统,就类似支教,而他们两人的实习地点就是古碑镇的定点医疗点。\n与宁哲等四人一样,顾云清和叶妙竹两人分别是在推开诊所以及药房的门之后来到这里的。\n“果然与门有关啊。”宁哲心中的猜测更加笃定了几分:“如果我们都是通过‘门’进入的何家村,这是否意味着,在这个村子某处,也隐藏着某扇可以让我们离开这个诡异世界,返回现实的‘门’?”\n“不确定,但有可能。”张养序认可了他的猜测。\n张养序又对叶妙竹问道:“你们应该知道吉凶和忌讳的存在,但为什么你们没有进入祠堂翻看黄历,而是躲在街对面的小巷子里?”\n叶妙竹摇了摇头:“我们不敢进去。”\n顾云清也道:“何家人往常每天都会准时来到祠堂翻阅黄历,查看吉凶,但今天他们一个都没有来,你们知道这是为什么吗?”\n“为什么?”冯玉漱连忙问道。\n顾云清深吸一口气,说道:“我也是偷听两个年纪很大的村民聊天说的……说是,蛇神病了,今天是祂发病的日子。”\n(本章完)",
20
+ "url": "https://69shuba.cx/txt/84533/39367660"
21
+ }
22
+ ]
split_scraped_chapters.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "title": "第1章 黄历",
4
+ "content": "第1章 黄历\n2024-11-18\n第1章 黄历\n农历四月廿三,芒种。\n屋外下着雨,宁哲走进供奉着蛇神的祠堂,翻开钉在蛇神雕像舌头上的老旧黄历,查看今日吉凶:\n【宜:】\n【忌:出行、安葬、行丧、祭祀】\n“忌出行……今天的规则是不能出门么?”宁哲端详着面前的黄历,将上面的内容牢记于心。\n黄历的内容是在这个与世隔绝的小山村生存下去的关键。\n这个村子名叫何家村,位于一处四面环山的盆地中央,与世隔绝。整个村子被一条河分割成东西两半,由三座拱桥连接。\n何家村的人都信蛇神,家家户户都供着蛇神的画像。蛇神的形象被描绘为一条长着一对弯曲长角的青玉大蛇,一尊樟树根雕的蛇神木像被供奉在村南头的宗族祠堂里,被何家村先人的牌位簇拥着,也就是宁哲现在所在的地方。\n蛇神雕像的舌头上钉着一本老旧的黄历,何家村人每天子夜最重要的事情,就是来到祠堂里翻一页黄历,查看今日吉凶,然后才能安心入睡。\n据村里人讲,黄历上的吉凶是蛇神透露的天机。\n黄历每天给出的宜与忌都是随机的,知道其内容就能趋吉避凶,做今日宜做的事情会走好运,相对应的犯了忌就会走霉运,屡次犯忌会倒血霉,犯忌太多太重的人甚至会离奇暴毙。\n对于这点,宁哲身有体会。\n他昨天刚进村时,就因为不清楚这里的规则无意间触犯了昨日吉凶中‘见生’与‘除虫’的忌讳,导致自己倒霉了一整天:\n走路被石板路的缝隙绊倒、路过房檐下被掉落的瓦片砸中后脑勺、刚想出门又下起了瓢泼大雨……够呛熬到半夜,遗世而独立的小山村即将迎来新的一天。宁哲蹲守在祠堂门口,零点一过便立刻翻开黄历,查看今日吉凶。\n宁哲再次确认了一遍黄历的内容:\n【宜:】\n【忌:出行、安葬、行丧、祭祀】\n“安葬、行丧、祭祀都好理解,但‘出行’具体是什么意思?是指出远门吗,还是只要离开了房屋等建筑物,到了外界就算?另外……”\n宁哲心生疑惑,视线略微上移,落在了‘宜’字后面的空白上:\n“为什么黄历上的内容只有忌,没有宜?”\n今日诸事不宜?\n他正疑惑时,祠堂外传来了细碎的脚步声,应该是有村民来查看黄历了。宁哲离开供着蛇神雕像的莲花台前,走向祠堂的侧门,准备离开。\n何家村的村民不是什么正经人,可以的话,宁哲并不想跟他们多接触。\n但是身后的烛火微微摇晃,宁哲来到祠堂的侧门沿,心生犹豫。在无法确定‘出行’忌讳具体含义的情况下,他不是很敢贸然出门,昨天已经倒霉够了。\n“零点已过,今日吉凶已经刷新,如果仅是离开房屋在村内活动也算‘出行’的话,那么离开自己家,前来祠堂查看黄历的村民此时此刻就已经犯了忌。”宁哲心中想道。\n蛇神是宽宏大量的,无知者初次犯忌只会倒一些无关紧要的小霉,不会伤及性命。也就是说只要观察来到祠堂的村民是否倒霉,应该就能大致判断出他们有没有触犯‘出行’忌讳了。\n想到这里,宁哲没有急着离开,他侧身来到一根贴着墙的柱子旁边,柱子的颜色纯黑,上面挂着深红色的旧绸帘子,昏暗的烛台在帘子下方微微摇晃。宁哲将自己藏在帘后,透过烛光的缝隙观察着祠堂的正门。\n且轻且闷的低沉脚步夹杂着淅沥的水声,一双白色的运动鞋踩过街道上的水坑,来到了祠堂门口。\n“……”宁哲双眼死死盯着着那个从门外走进的人影,瞳孔因震惊而微微收缩。\n那是一个身材健壮的青年男子,看上去不到三十岁,简单的背心搭配着适合跑动的宽松中裤,粗壮的手臂和脚上的运动鞋一起说明了这是个热爱锻炼的家伙,然而就是这样一副平平无奇的穿着打扮,却令宁哲不寒而栗。\n“自从我被卷入何家村,我在这里见到的每一个村民都是怪异的样子,他们穿着裁剪过时的麻布衣服,用着原始的牛拉犁耕田,说话也带着浓重的客家口音……路上和屋里甚至连一盏电灯都没有。”\n“如果不是这里诡异的规则,以及村民们那像皮影人偶一样僵硬的动作,我甚至怀疑过自己是不是穿越到了古代。”\n但就是在这样一个诡异的‘古代村庄’,他却见到了另一个穿着现代着装束的人。\n“他是谁?是和我一样被卷入这个诡异之地的吗?这里除了我还有其他活人?”\n种种疑惑填满了宁哲的脑海,但谨慎的性格让他没有轻举妄动,将呼吸放缓,竭力控制着自己不发出任何响动,宁哲双眼一眨不眨地注视着那个身穿背心运动鞋的健壮男子走进祠堂,径直来到内堂,站定在蛇神��像前。\n“他的目标也是黄历。”宁哲心中明了。\n这名背心男子很可能和自己一样,是偶然卷入这个诡异村庄的外地人,甚至可能也无意间触犯过蛇神禁忌,他深夜来到祠堂的目的也许也和自己一样——翻阅黄历,查看今日吉凶。\n背心男子抬头注视着挂在蛇神舌头上的老旧黄历,面露疑惑表情,宁哲知道他在疑惑什么:\n“他以为自己是第一个来到祠堂的人,黄历还没有被翻过,还停留在昨天。因此他现在可能在疑惑,黄历上的内容为什么和自己昨天触犯的忌讳对不上。”\n但实际上,早来一步的宁哲已经将黄历翻到了今天,当然对不上。\n背心男子在蛇神雕像前踌躇片刻,最终还是向黄历伸出了手。他准备翻阅黄历了。\n“是了,这本黄历上没有公元日期,使用的是农历,用惯了公制历法的现代人很难根据农历日期判断上面显示的是不是今天。”宁哲大致猜到了现在发生的情况。\n这情况其实只要打开手机看一眼就能解决,手机厂商一般都会在日历界面同时显示公历和农历,但或许是因为黄历内容与自己实际触犯的忌讳内容对不上,错乱的事实让这名背心男子慌了神,极度的紧张之下,他没能冷静下来想到这一点。\n请...您....收藏6...9...书....吧....!\n刑不可知则威不可测,虚无缥缈的规则,与近在咫尺的死亡,在这种环境下,很少有人能时刻保持理智。\n宁哲屏息凝神,双眼死死盯着男子那只伸向黄历的手:“已经翻到今天的黄历如果被再次翻页,难道会显示明日吉凶?”\n他没有丝毫出去提醒对方的意思,宁哲现在只好奇一件事:在今日查看明日吉凶,蛇神会允许吗?\n这个问题很快就得到了答案。\n背心男子短粗的手指将黄历捏起一页翻开,便要将写着今日吉凶的这一页纸张挂在钉子上。但这一页纸还未挂上去,几乎是在他翻开黄历的不到一秒之后,一个沉闷的响声在祠堂中响起。\n那是人的肉体与黄土地面碰撞的声音,他没能将黄历成功翻到明天,整个人如脱力般瘫倒在了地上,一动不动。\n“看来答案是不允许。”宁哲心中自语。\n尽管还没有实际检查过尸体,但一种莫名的预感出现在宁哲心中,就像是谁给他的暗示。\n他觉得,这个男人死了。\n清冷的晚风从大门外吹了进来,被翻开的那一页黄纸迟迟没有落回原位,像一片枯叶飘飞在风中簌簌作响,又似一只翅膀深黄的蝴蝶翻飞在这静谧的祠堂中,‘明日吉凶’在蝴蝶的翅膀下依稀可见。\n宁哲深吸一口气,转过视线不去看黄历,但也不准备离开。\n背心男子的暴毙不是运气原因,而是触犯了某种独立于‘今日吉凶’这种忌讳之外的隐藏死忌。\n“类似表规则下的潜规则吗?”宁哲心中一边思索着,一边快步从帘后走出。\n祠堂里刮着凉爽的穿堂风,宁哲用麻利的手脚将背心男子的尸体从蛇神雕像前拖走,藏在了被大红桌布覆盖的供桌下下面。刚死的人短时间内不会有什么气味,尸体藏在这里应该不会暴露。\n宁哲整理好桌布,快步离开供桌,重新藏回了靠墙的帘子后面。\n“这个村子里除了我和这男人外应该还有其他活人,他们可能也会来到祠堂,翻阅黄历。”\n宁哲没有被发生在眼前的诡异死亡吓破胆,他仍清楚地知晓自己现在应该做什么——通过观察从外面来到这里的其他人倒霉与否,或许就能判断出今日吉凶里‘出行’忌讳的具体含义。\n黄历的内容是在这个与世隔绝的小山村生存下去的关键。\n(本章完)"
5
+ },
6
+ {
7
+ "title": "第2章 张养序",
8
+ "content": "第2章 张养序\n2024-11-18\n第2章 张养序\n搬运尸体的时候,宁哲顺手摸走了背心男子兜里的手机,黑色的手机壳里夹着一张百元钞票,但没有身份证和驾驶证之类能够确定身份的证件。\n宁哲不知道背心男子的锁屏密码,用他尸体的指纹解锁了屏幕。解锁后,宁哲做的第一件事便是进入系统设置,将自动锁定设置成‘永不’,随后才开始翻看其男子手机里各种的信息。\n——人在死亡的约三小时后,其细胞内的微弱生物电便会完全消失,这时候,手机等电子设备就无法识别他的指纹了。\n背心男子的微信昵称叫做‘AAA巧高里健身俱乐部-教练志远’,实名认证是‘林*远’。\n林志远的微信好友很多,多是备注‘客户’或是‘学员’的女性用户,在与一名姓蔡的女客户的最近聊天中,林志远提到自己最近要回趟家里看看老人,会让同事顶班几天。\n对方回了个‘想你’的表情包。\n翻看朋友圈,林志远发最后一条朋友圈的时间是在昨天上午,内容为‘服务站的饭菜价格太贵了,又贵又油腻,吃一顿要减���一个月才能缓过来’,配图是一辆停在充电桩旁边的N1轿跑。\n“林志远昨天上午还在高速服务站上吐槽饭菜油腻,说明他进入村子的时间至少在那之后。”宁哲回忆起自己进入何家村的情形,他是早上7点被卷入这里的,比林志远早了几小时。\n确认流量打开后,宁哲给那位姓蔡的女客户发了一句‘在吗?’。\n消息左侧显示红色叹号,发送失败。\n“果然又失败了。”宁哲并不感到意外。\n查看通话记录和聊天界面,可以看见林志远给备注为父母和女朋友等的联系人每人都打了好几次电话,运营商的紧急呼救功能也用过了,但这些联系外界的尝试无一都失败了。\n宁哲对此并不意外,因为自己也一样,自从进入何家村,他便完全丧失了与外界的所有联系,4G信号显示满格,但却连一条消息都发不出去、接收不到。\n正常人对这种情况或许会感到沮丧,但宁哲并不是什么正常人,不知出于什么心态,宁哲退出微信,用林志远的手机拨打了自己的电话号码。\n嗡—嗡——\n大腿处传来嗡嗡的振动,他口袋里的电话被拨通了。\n这时,祠堂外传来了脚步声。\n宁哲挂断电话,将林志远的手机保持在亮屏状态塞进外套口袋,集中精神聆听着门外的脚步。\n之前林志远进门时,他脚上的气垫运动鞋踩在黄土地和石板路上的声音十分沉闷,而这次的脚步则是清脆而响亮的,硬质鞋跟敲打地面的声音踢踢踏踏,不止一个声音,是两个。\n宁哲的视线牢牢注视着门口,从那里走进来的是一名西装革履的中年男子,以及一名穿着OL制服的长发女性,做工考究的皮鞋和高跟鞋上沾了几点黄色的泥水。\n“怎么会是他?”宁哲有些惊讶。\n他认识那名中年男子,虽然对方未必认识他。\n宁哲是从新闻里认识这个男人的,他的名字叫做张养序,是琴州最大的房地产开发企业‘新世界’集团的一把手。宁哲这次离开学校返回农村老家,便是因为张养序的企业有意向在附近拿地,要在他的家乡小镇‘古碑镇’开发一处新的园区,宁哲家的宅子便在张养序企业的预计拆迁名单里。\n但家里的外公外婆都不识字,所以才需要他这个还在念书的高中生请几天假,回一趟家。\n“张养序居然也被卷入这个地方了。……是了,我之前在地方台的新闻里看到过,‘新世界集团’的高管近几天就要来古碑镇实地考察,和地方敲定拿地合同,想不到居然是总裁亲自来。那旁边的女人应该就是张养序的秘书或是助理之类人物。”\n凭借破碎的信息,宁哲大致推出了事情的经过:“林志远是回乡探亲被卷入这里。我是回家帮外公外婆看拆迁合同的路上被卷入。而张养序和那个女人,则是来古碑镇实地考察的时候被卷入这里的么?”\n这个名叫何家村的诡异村子,与自己的家乡古碑镇,存在什么联系吗?\n疑惑中,宁哲看着张养序与穿着OL制服的女人一起走到了供奉着蛇神雕像的莲花台前。\n张养序一只手拿出手机打开手电筒,一只手按住被风吹得簌簌飞舞的黄历纸张,细细端详着上面的内容。很快,他便产生了与林志远之前一样的疑惑,黄历的内容与自己昨天触犯的忌讳对不上。\n他侧首瞥了一眼手机屏幕,眉头顿时皱了起来:“农历四月廿三,上面显示的就是今天的内容,黄历被翻过了。”\n张养序的声音低沉,带着一点点的烟嗓,语气沉着而严肃:“这里有人来过。”\n旁边的女人低声问:“是村民吗?”\n请...您....收藏6...9...书....吧....!\n张养序摇了摇头:“我们来的时候已经注意过了,整条街的房门都被从里面反锁,今晚没有任何一个村民出过门。”\n“不是村民?那是……?”女人的声音疑惑,又有些不确定:“难道被卷入这里的除我们之外,还有其他人?”\n“有可能。”张养序没有否认。\n“……他刚才说,他们两人一路走来查看了整条街的房门反锁情况。如果是这样的话?”宁哲简单心算了下时间,一块石头顿时落地了:“看来,如果只是离开房屋在村内街道上行走,是不会触犯‘出行’忌讳的。”\n出行的忌讳另有所指。\n确定了今日吉凶,宁哲没有进一步与张养序二人接触的意思,在这种环境下,没有什么人值得信任,他藏身的柱子后面几步远便是祠堂的侧门,是时候从那里离开了。\n宁哲双目警惕地看着站在蛇神雕像前讨论的张养序二人,背对着侧门,放轻脚步缓缓后退,冷冽的晚风从门外灌进来,将他的脊背吹得冰凉。\n还未等退到门外,忽然,一声带着哭声的惨叫从宁哲背后传出。\n“你是谁……”\n(本章完)"
9
+ },
10
+ {
11
+ "title": "第3章 冯玉漱",
12
+ "content": "第3章 冯玉漱\n2024-11-18\n第3章 冯玉漱\n似哭似笑的诡异惨叫令宁哲浑身顿时一激灵,大脑还没反应过来,身体便下意识地转到背后,朝声音传来的方向一脚踢出。\n定神一看,那声音的主人已被踢翻在地,双手捂着腹部痛苦地蜷缩着。\n“居然是活人。”宁哲松了口气。\n身后祠堂里,被惊动了的张养序和那名女OL已经朝侧门这边走过来了。\n自知已经暴露的宁哲不再想着离开,目光快速扫过这名突然出现在门外,又被自己踢翻在地的人。\n这是一名外表年龄大约在3~40岁左右的中年女性,但这个估计并不一定很准,因为她身上佩戴着不少珠光宝气的名贵首饰,衣着更是华丽鲜亮。\n她脖子上的珍珠项链颗颗珠圆玉润,左手一只晶莹剔透的白玉手镯,在柜台里的标价可能比宁哲家老宅的拆迁款还要高。乌黑柔亮的长发被一支金镶玉的梧桐发簪精心盘起,雪白细嫩的皮肤没有丝毫皱纹,一看就没怎么晒过太阳。右手一串包浆透亮的菩提子,可能还信佛。\n一身绛紫色的束身长裙,腰上缚着一圈绣有精美蕾丝花边的粉紫腰封,细致的设计与裁剪将一具丰盈完满的熟女娇躯凸显得淋漓尽致。圆润的鹅蛋脸上是一张美艳如出水芙蓉般的雍容面容,标致的五官端庄而淑雅。\n……如此种种,俨然是一名常年养尊处优的清闲贵妇人,保养得十分到位。生活条件好的人总是衰老得很慢,宁哲也不敢肯定这贵妇究竟多少岁了,看着像三十,实际可能有四十,甚至可能已经年逾古稀。\n听见身后张养序的脚步逐渐近了,宁哲轻轻拍拍妇人的肩膀:“不好意思,你没事吧?”\n刚才那一脚虽是下意识踢出,但碍于祠堂侧门的窄小,宁哲并没能使出全力,他感觉这一脚最多也就让对方的腹腔受到一些不算太大的冲击,不至于伤到内脏导致内出血的程度。\n他对这类事情的计算一向很准,早在上小学时宁哲便可以做到把招惹自己的熊孩子一个个毒打至鼻青脸肿,但又精确地将每个人身上的所有外伤都完美控制在刚刚好是皮外伤的程度,没有一次将事情闹大过。这次也不出所料。\n片刻,一身珠光宝气的雍容贵妇人便挣扎着从石板路上爬了起来,捂着肚子靠在墙上呼呼地喘着气。\n“你,怎么见面就打人呢…”贵妇人的声音因腹痛而有些发虚,但却出乎意料的没有对他恶言相向。\n“实在不好意思,你没有声音突然出现在我后面,我还以为是那些人不人鬼不鬼的何家人在偷我背身,一时反应过激了。”宁哲非常诚恳地连连道歉。\n“没事没事…”妇人连连摇头:“我明白的,在这种鬼地方谁都会神经紧绷,不怪伱,不怪你…”\n宁哲注意到,对方看着自己的神色十分复杂,苍白的面孔透露着对这片陌生的诡异之地的不安,微抿的嘴角是对刚才殴打她的少年的后怕与恐惧,但更多的,却是担惊受怕许久之后,终于见到其他活人的欣喜与安心。\n“这个女人的性格懦弱,缺乏主见,被我殴打之后非但没有表现出敌意或是嫌恶,反而积极主动地为我的错误开脱,竭力示好,试图拉我的好感。”宁哲在脑中快速解剖了这名贵妇人的性格特征。\n随即他转过身,对已经走到侧门门口的张养序打了声招呼:“你好,张总,没想到能在这里见到你。我叫做宁哲,是桃源市一中的一名高三学生。”\n“你好,我是张养序。”张养序不咸不淡地说。\n“我是张总的法律顾问,我叫谢思凝。”跟在张养序身后的女人的语气则相对欣快一些。\n张养序的目光从倚在墙边的妇人和宁哲身上快速扫过,有些惊讶:“白夫人居然也在这里……宁哲是吗?你认识我么?”\n“天下谁人不识君?张总谦虚了,至少我们琴州人没几个是不认识你的。”宁哲轻描淡写地微笑道:“还是沾你的光,我才会从学校请假回老家,本来还想着这下能变成拆迁户整天美美收房租了,可谁知道一睁眼,就来到了这么个鬼地方。”\n张养序微微点头:“原来如此。”\n他也没想到,宁哲居然是古碑镇的本地人。\n宁哲用下巴指了指靠在墙边的贵妇人,接着问道:“你刚才说白夫人,这位女士姓白么?张总你认识她?”\n张养序没有出声,站在他身后的法律顾问谢思凝适时地开口介绍道:“这位是‘新家园’集团的最大持股人白复归,白先生的夫人,冯玉漱女士。白先生与张总同时看中了古碑镇这块区域,两方都想拿下这片地区的开发合同,我们两家目前是竞争关系。”\n“原来如此。”宁哲对谢思凝微微一笑:“但在这种地方,生意场上的关系好像没有什么意义。”\n张养序也笑了:“的确没什���意义。”\n在外界他张养序可能是身价数千亿,在社会各界都拥有拥有广泛人脉的风云人物,但在这个与世隔绝的小村庄,怪力乱神的诡异之地,他不过是一个身材发福,头顶也有些稀疏的中年男人罢了。\n这也是他愿意和宁哲平等对话的原因。\n在这里,宁哲不是一个每天都刷题到深夜的卷王高中牲,而是一个身强体壮,精力旺盛的成年男性。\n请...您....收藏6...9...书....吧....!\n宁哲来到墙边,向簪金戴玉满身贵气的冯玉漱伸出手,将她拉了起来:“夫人你是怎么来到这儿的?”\n冯玉漱忍着腹痛拍拍衣裙上的尘土,有些拘谨地说道:“我是和丈夫还有我女儿一起来到古碑镇的,他平时一直忙工作,很少在家里。这次原本是想趁着实地投标的机会,一家人难得聚在一起来乡下透透气,玩一玩看看风景,但没想到……”\n没想到异变忽然发生,将她拉进了这个名叫何家村的诡异之地。\n“那你的丈夫和女儿呢?他们也来到这里了吗?”宁哲追问道。\n冯玉漱摇了摇头:“没有,我昨天在村里找了很久,触犯了好几次忌讳,都没有找到他们,看来误入这里的就只有我。”\n“好的,明白了。”宁哲满意点头,这样一来,他对面前几人的情况就都有了基本的了解。\n能在这种地方遇到活人总归是一件好事,但抱团取暖的和谐表象之下,实际的情况却远没有那么和谐。\n张养序身后,法律顾问谢思凝的手机微微振动,她不动声色地解锁屏幕快速瞟了一眼,上面是备注‘张总’发给她的一条短信:\n“黄历是宁哲翻的,他比我们所有人都早到,小心他。”\n(本章完)"
13
+ },
14
+ {
15
+ "title": "第4章 门和病",
16
+ "content": "第4章 门和病\n2024-11-18\n第4章 门和病\n商议之后,四人一致认为应该再在祠堂稍作等待,如果何家村里还存在着其他活人,并且知道‘忌讳’的存在,那么他们就一定会来祠堂翻阅黄历,查看今日吉凶。\n今晚不晓得发生了什么事,何家村里家家关门,户户闭窗,没有一户人家出门来祠堂查看今日吉凶。\n这件事情很反常,而反常便意味着诡异。\n“你有什么头绪吗?”等待途中,张养序问道。\n“没有。”宁哲摇头道:“何家人每夜子时都会来祠堂翻看黄历,今天却没有来,要么他们已经不在乎趋吉避凶了,要么他们有其他的途径知道今日吉凶。要么就是……今天的祠堂里面存在着某种危险,让他们不敢来。”\n“哦?”张养序有些好奇:“是这样的吗?”\n“我不知道,只是猜测而已。”宁哲摊手。\n“危…危险?”一听祠堂里可能有危险,冯玉漱的整张脸都白了,她本就信佛,在何家村里亲眼见识过蛇神的诡异之处后就更是战战兢兢,做什么事情都如履薄冰。\n冯玉漱心有余悸地看了看莲花台上的死者牌位和蛇神雕像,后又带着求助的眼神望向宁哲,提议道:“不然,我们先出去,在祠堂外面等吧……一直在蛇神面前呆着不走,会不会有些冒犯?”\n“我觉得也是。”宁哲表示赞同,将目光移向张养序和谢思凝:“你们觉得呢?”\n“有道理,祠堂这种地方本就不是外人能进的,更何况是在这里久待。”谢思凝也觉得是这样:“张总,我们要出去吗?”\n张养序默默看了宁哲一眼,点了头:“走吧。”\n四人从大门离开了供奉着蛇神的莲花台前,站在祠堂大门外的屋檐下等候。\n几个陌生人之间没什么可聊的话题,谢思凝提议众人可以彼此交流一下各自被卷入何家村的过程,或许可以从中找出什么共同点,或是离开这里的线索。\n冯玉漱首先说道:“昨天…应该是前天了,我和丈夫还有女儿在古碑镇的一家酒店住下,因为他有晚上独自工作的习惯,所以我们开了三间房,他和我还有女儿各自一间。”\n“大约在晚上7点左右,我泡了点咖啡,准备送到丈夫的房间……但在打开他的房门,跨过门框后,出现在我面前的却不是酒店房间,而是一条铺着青石板的狭窄小巷。”\n冯玉漱心有余悸地说道:“当时,我手里握着的不锈钢门把手变成了一个老旧的黄铜门闩,身后是一处石砌瓦盖的低矮民房,屋子里空荡荡的……就好像我刚从这扇门里走出来一样。”\n张养序微微点头:“我的情况也差不多,当时我的车正停在古碑镇外的一处加油站里,司机去上厕所了,我让思凝去帮我买包烟,但她却迟迟没回来,发消息也不回,我只好打开车门出去找她。打开车门下车的那一瞬间,我来到了这里。”\n谢思凝接着道:“我在加油站的小卖部里买到了张总要的烟,但在推开门,离开小卖部后,我脚下就已经不是加油站的混凝土路面��,而是铺在何家村街道上的石板。”\n“我更直接一点。”宁哲点头道:“我回到家乡,推开老宅的大门,然后就到了这里。”\n张养序眼神微凝,若有所思。\n是巧合吗?还是必然?不管是老宅的大门、酒店的房门、百货铺的玻璃门……甚至是轿车的车门,四人来到何家村的过程虽有不同,但都与‘门’有关,\n宁哲的表情依然平静,心中想道:“可惜林志远已经已经死了,不然还能问问他是怎么进到这里来的,是不是也是通过了某扇门?”\n忽然,一角黑影出现在了宁哲的视野边缘,转瞬即逝。\n“对面巷子里有人,他要跑。”宁哲毫不犹豫地掏出手机,打开手电筒,将光源指向街对面的一条小巷。\n手机自带的手电筒照明距离并不远,宁哲这样做只是为了以最直接快速的方式将那个黑影的坐标信息传递给其他人,用言语描述的效率太低,而且容易失真。\n但古怪的是,刚才还在试图跑走的黑色人影在见到宁哲手中打开的手电筒后,反而停下了脚步。\n那人朝这边走了两步,随后,一点白光从他的手中亮起,也是一个手电筒。\n“太好了,是活人。”冯玉漱顿时松了一口气,刚才她的心都快要跳出胸口。\n走近后才发现,街对面的巷子里不止一个人,而是两个。一男一女,两个青年,看上去年纪都不大的样子,似乎还是大学生。\n“你们好,我叫做顾云清。”男青年首先自曝姓名,随后介绍了自己身边的那名女青年:“这位是我的学姐,我们都是琴州医科大学的学生。”\n“我叫叶妙竹。”顾云清的学姐自我介绍道:“伱们也是被意外卷入这里的吗?”\n宁哲点了点头。\n经过一番交流,众人交换了彼此的情报以及能够证明身份的证件,顾云清和叶妙竹都出示了自己的实习证。\n请...您....收藏6...9...书....吧....!\n顾云清和叶妙竹两人都是实习医生,琴州医大一直都有让学生下乡去偏远地方的小诊所实习积累经验的传统,就类似支教,而他们两人的实习地点就是古碑镇的定点医疗点。\n与宁哲等四人一样,顾云清和叶妙竹两人分别是在推开诊所以及药房的门之后来到这里的。\n“果然与门有关啊。”宁哲心中的猜测更加笃定了几分:“如果我们都是通过‘门’进入的何家村,这是否意味着,在这个村子某处,也隐藏着某扇可以让我们离开这个诡异世界,返回现实的‘门’?”\n“不确定,但有可能。”张养序认可了他的猜测。\n张养序又对叶妙竹问道:“你们应该知道吉凶和忌讳的存在,但为什么你们没有进入祠堂翻看黄历,而是躲在街对面的小巷子里?”\n叶妙竹摇了摇头:“我们不敢进去。”\n顾云清也道:“何家人往常每天都会准时来到祠堂翻阅黄历,查看吉凶,但今天他们一个都没有来,你们知道这是为什么吗?”\n“为什么?”冯玉漱连忙问道。\n顾云清深吸一口气,说道:“我也是偷听两个年纪很大的村民聊天说的……说是,蛇神病了,今天是祂发病的日子。”\n(本章完)"
17
+ }
18
+ ]