2025-12-17 04:31:10 [scrapy.utils.log] INFO: Scrapy 2.11.1 started (bot: news_scraper) 2025-12-17 04:31:10 [scrapy.utils.log] INFO: Versions: lxml 6.0.2.0, libxml2 2.14.6, cssselect 1.3.0, parsel 1.10.0, w3lib 2.3.1, Twisted 25.5.0, Python 3.11.13 (main, Aug 12 2025, 22:39:41) [GCC 14.2.0], pyOpenSSL 25.3.0 (OpenSSL 3.5.3 16 Sep 2025), cryptography 46.0.1, Platform Linux-5.15.0-157-generic-x86_64-with 2025-12-17 04:31:10 [scrapy.addons] INFO: Enabled addons: [] 2025-12-17 04:31:10 [asyncio] DEBUG: Using selector: EpollSelector 2025-12-17 04:31:10 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor 2025-12-17 04:31:10 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.unix_events._UnixSelectorEventLoop 2025-12-17 04:31:10 [scrapy.extensions.telnet] INFO: Telnet Password: d87120ad1a3cce8f 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from creating-client-class.iot-data to creating-client-class.iot-data-plane 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from before-call.apigateway to before-call.api-gateway 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from request-created.machinelearning.Predict to request-created.machine-learning.Predict 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.autoscaling.CreateLaunchConfiguration to before-parameter-build.auto-scaling.CreateLaunchConfiguration 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.route53 to before-parameter-build.route-53 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from request-created.cloudsearchdomain.Search to request-created.cloudsearch-domain.Search 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from docs.*.autoscaling.CreateLaunchConfiguration.complete-section to docs.*.auto-scaling.CreateLaunchConfiguration.complete-section 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.logs.CreateExportTask to before-parameter-build.cloudwatch-logs.CreateExportTask 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from docs.*.logs.CreateExportTask.complete-section to docs.*.cloudwatch-logs.CreateExportTask.complete-section 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.cloudsearchdomain.Search to before-parameter-build.cloudsearch-domain.Search 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from docs.*.cloudsearchdomain.Search.complete-section to docs.*.cloudsearch-domain.Search.complete-section 2025-12-17 04:31:10 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/endpoints.json 2025-12-17 04:31:10 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/sdk-default-configuration.json 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Event choose-service-name: calling handler 2025-12-17 04:31:10 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz 2025-12-17 04:31:10 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz 2025-12-17 04:31:10 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/partitions.json 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler ._handler at 0x7fe468a40860> 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2025-12-17 04:31:10 [botocore.endpoint] DEBUG: Setting s3 timeout as (60, 60) 2025-12-17 04:31:10 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/_retry.json 2025-12-17 04:31:10 [botocore.client] DEBUG: Registering retry handlers for service: s3 2025-12-17 04:31:10 [botocore.utils] DEBUG: Registering S3 region redirector handler 2025-12-17 04:31:10 [botocore.utils] DEBUG: Registering S3Express Identity Resolver 2025-12-17 04:31:10 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.closespider.CloseSpider', 'scrapy.extensions.feedexport.FeedExporter', 'scrapy.extensions.logstats.LogStats', 'scrapy.extensions.throttle.AutoThrottle'] 2025-12-17 04:31:10 [scrapy.crawler] INFO: Overridden settings: {'AUTOTHROTTLE_ENABLED': True, 'BOT_NAME': 'news_scraper', 'CLOSESPIDER_TIMEOUT': 1800, 'CONCURRENT_REQUESTS': 4, 'DOWNLOAD_DELAY': 2, 'FEED_EXPORT_ENCODING': 'utf-8', 'LOG_FILE': '/opt/scrapyd/logs/news_scraper/vnexpress_timestamp/2d6f28f8db0111f099e2d6783c969646.log', 'NEWSPIDER_MODULE': 'news_scraper.spiders', 'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['news_scraper.spiders'], 'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'} 2025-12-17 04:31:10 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'news_scraper.middlewares.NewsScraperDownloaderMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2025-12-17 04:31:10 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2025-12-17 04:31:10 [scrapy.middleware] INFO: Enabled item pipelines: [] 2025-12-17 04:31:10 [scrapy.core.engine] INFO: Spider opened 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from creating-client-class.iot-data to creating-client-class.iot-data-plane 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from before-call.apigateway to before-call.api-gateway 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from request-created.machinelearning.Predict to request-created.machine-learning.Predict 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.autoscaling.CreateLaunchConfiguration to before-parameter-build.auto-scaling.CreateLaunchConfiguration 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.route53 to before-parameter-build.route-53 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from request-created.cloudsearchdomain.Search to request-created.cloudsearch-domain.Search 2025-12-17 04:31:10 [botocore.hooks] DEBUG: Changing event name from docs.*.autoscaling.CreateLaunchConfiguration.complete-section to docs.*.auto-scaling.CreateLaunchConfiguration.complete-section 2025-12-17 04:31:11 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.logs.CreateExportTask to before-parameter-build.cloudwatch-logs.CreateExportTask 2025-12-17 04:31:11 [botocore.hooks] DEBUG: Changing event name from docs.*.logs.CreateExportTask.complete-section to docs.*.cloudwatch-logs.CreateExportTask.complete-section 2025-12-17 04:31:11 [botocore.hooks] DEBUG: Changing event name from before-parameter-build.cloudsearchdomain.Search to before-parameter-build.cloudsearch-domain.Search 2025-12-17 04:31:11 [botocore.hooks] DEBUG: Changing event name from docs.*.cloudsearchdomain.Search.complete-section to docs.*.cloudsearch-domain.Search.complete-section 2025-12-17 04:31:11 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/endpoints.json 2025-12-17 04:31:11 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/sdk-default-configuration.json 2025-12-17 04:31:11 [botocore.hooks] DEBUG: Event choose-service-name: calling handler 2025-12-17 04:31:11 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/service-2.json.gz 2025-12-17 04:31:11 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/s3/2006-03-01/endpoint-rule-set-1.json.gz 2025-12-17 04:31:11 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/partitions.json 2025-12-17 04:31:11 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2025-12-17 04:31:11 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler ._handler at 0x7fe467aa19e0> 2025-12-17 04:31:11 [botocore.hooks] DEBUG: Event creating-client-class.s3: calling handler 2025-12-17 04:31:11 [botocore.endpoint] DEBUG: Setting s3 timeout as (60, 60) 2025-12-17 04:31:11 [botocore.loaders] DEBUG: Loading JSON file: /usr/local/lib/python3.11/site-packages/botocore/data/_retry.json 2025-12-17 04:31:11 [botocore.client] DEBUG: Registering retry handlers for service: s3 2025-12-17 04:31:11 [botocore.utils] DEBUG: Registering S3 region redirector handler 2025-12-17 04:31:11 [botocore.utils] DEBUG: Registering S3Express Identity Resolver 2025-12-17 04:31:11 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2025-12-17 04:31:11 [vnexpress_timestamp] INFO: Spider opened: vnexpress_timestamp 2025-12-17 04:31:11 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6025 2025-12-17 04:31:11 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2025-12-17 04:31:16 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2025-12-17 04:31:18 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/) 2025-12-17 04:31:21 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:31:22 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Video được công bố ngày 16/12 cho thấy vận tải cơ hạng trung hế hệ mới của Trung Quốc, thường được gọi là Y-30, lần đầu xuất hiện trên bầu trời thành phố Tây An. Phi cơ được gắn cảm biến dữ liệu không khí ở mũi, thiết bị thường xuất hiện trên những nguyên mẫu bay thử để thu thập thông tin. Nguyên mẫu Y-30 được trang bị 4 động cơ tua-bin cánh quạt, có hình dạng bên ngoài tương đồng với máy bay Airbus A400M những kích thước nhỏ hơn. Chưa rõ nó sử dụng động cơ nào, có khả năng là biến thể của dòng WJ-6 trang bị trên vận tải cơ Y-8, Y-9 và máy bay cảnh báo sớm KJ-600. Giới chức Trung Quốc chưa bình luận về thông tin. Giới phân tích quân sự nhận định Y-30 có tải trọng 25-30 tấn, cao hơn mức 20-25 tấn của mẫu Y-8 và Y-9 trong biên chế không quân Trung Quốc. Phi cơ được cho là cùng phân hạng về kích thước với dòng C-130 Mỹ, với khối lượng cất cánh tối đa 80 tấn và tầm bay 6.000-7.000 km khi mang đầy tải. Thông tin về dự án Y-30 lần đầu xuất hiện từ năm 2014, khi mô hình máy bay vận tải hạng trung được trưng bày tại triển lãm hàng không Chu Hải. Giới chức Trung Quốc khi đó cho biết chương trình đang trong khâu thiết kế ý tưởng và dự kiến bước sang giai đoạn phát triển toàn diện sau đó hai năm, với mục tiêu biên chế vào năm 2020. Trung Quốc gần đây hé lộ hàng loạt khí tài mới, trong đó có tiêm kích J-36 và J-XDS, máy bay cảnh báo sớm KJ-3000 và các phi cơ không người lái vũ trang."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2025-12-17 04:31:22 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2025-12-17 04:31:22 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2025-12-17 04:31:22 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2025-12-17 04:31:22 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2025-12-17 04:31:22 [httpcore.connection] DEBUG: start_tls.complete return_value= 2025-12-17 04:31:22 [httpcore.http11] DEBUG: send_request_headers.started request= 2025-12-17 04:31:22 [httpcore.http11] DEBUG: send_request_headers.complete 2025-12-17 04:31:22 [httpcore.http11] DEBUG: send_request_body.started request= 2025-12-17 04:31:22 [httpcore.http11] DEBUG: send_request_body.complete 2025-12-17 04:31:22 [httpcore.http11] DEBUG: receive_response_headers.started request= 2025-12-17 04:31:27 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Wed, 17 Dec 2025 04:31:27 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-expose-headers', b'X-Request-ID'), (b'openai-organization', b'user-bmggli0qfnphtzkdehrnfdrn'), (b'openai-processing-ms', b'4917'), (b'openai-project', b'proj_AqBCEfNib7E5LbrMYDz2oklk'), (b'openai-version', b'2020-10-01'), (b'x-envoy-upstream-service-time', b'5101'), (b'x-ratelimit-limit-requests', b'30000'), (b'x-ratelimit-limit-tokens', b'150000000'), (b'x-ratelimit-remaining-requests', b'29999'), (b'x-ratelimit-remaining-tokens', b'149999422'), (b'x-ratelimit-reset-requests', b'2ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_704a41bccace4cb49b9153b7a476e90e'), (b'x-openai-proxy-wasm', b'v0.1'), (b'cf-cache-status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=rcqSK1li6GUE8Dzz88e3fIdBgz7e4sabhWa4g1AcqYY-1765945887-1.0.1.1-OiPh7s1Rev0tBwyIJccbovLPB3NwgifQulMKZuVV5K6WjLb.Ieqx_CI1vUjQVOao1YY5MFVoC5jxcXSoNn796wMfIDpq4i97lP38zscd.cY; path=/; expires=Wed, 17-Dec-25 05:01:27 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'Set-Cookie', b'_cfuvid=fUtqqAFt5ZqtGyySEsOsCU0v4fYDWTAFx548Loz51To-1765945887361-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9af3b0c2fa387164-HKG'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2025-12-17 04:31:27 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" 2025-12-17 04:31:27 [httpcore.http11] DEBUG: receive_response_body.started request= 2025-12-17 04:31:27 [httpcore.http11] DEBUG: receive_response_body.complete 2025-12-17 04:31:27 [httpcore.http11] DEBUG: response_closed.started 2025-12-17 04:31:27 [httpcore.http11] DEBUG: response_closed.complete 2025-12-17 04:31:27 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers([('date', 'Wed, 17 Dec 2025 04:31:27 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('access-control-expose-headers', 'X-Request-ID'), ('openai-organization', 'user-bmggli0qfnphtzkdehrnfdrn'), ('openai-processing-ms', '4917'), ('openai-project', 'proj_AqBCEfNib7E5LbrMYDz2oklk'), ('openai-version', '2020-10-01'), ('x-envoy-upstream-service-time', '5101'), ('x-ratelimit-limit-requests', '30000'), ('x-ratelimit-limit-tokens', '150000000'), ('x-ratelimit-remaining-requests', '29999'), ('x-ratelimit-remaining-tokens', '149999422'), ('x-ratelimit-reset-requests', '2ms'), ('x-ratelimit-reset-tokens', '0s'), ('x-request-id', 'req_704a41bccace4cb49b9153b7a476e90e'), ('x-openai-proxy-wasm', 'v0.1'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=rcqSK1li6GUE8Dzz88e3fIdBgz7e4sabhWa4g1AcqYY-1765945887-1.0.1.1-OiPh7s1Rev0tBwyIJccbovLPB3NwgifQulMKZuVV5K6WjLb.Ieqx_CI1vUjQVOao1YY5MFVoC5jxcXSoNn796wMfIDpq4i97lP38zscd.cY; path=/; expires=Wed, 17-Dec-25 05:01:27 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('x-content-type-options', 'nosniff'), ('set-cookie', '_cfuvid=fUtqqAFt5ZqtGyySEsOsCU0v4fYDWTAFx548Loz51To-1765945887361-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '9af3b0c2fa387164-HKG'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) 2025-12-17 04:31:27 [openai._base_client] DEBUG: request_id: req_704a41bccace4cb49b9153b7a476e90e 2025-12-17 04:31:27 [vnexpress_timestamp] INFO: Min timestamp: 2025-12-17 11:15:00, Published timestamp: 2025-12-17 11:29:29 2025-12-17 04:31:27 [urllib3.connectionpool] DEBUG: Starting new HTTP connection (1): tts-api:4444 2025-12-17 04:35:03 [urllib3.connectionpool] DEBUG: http://tts-api:4444 "POST /api/v2/text-to-speech HTTP/1.1" 200 411 2025-12-17 04:35:03 [scrapy.core.scraper] DEBUG: Scraped from <200 https://vnexpress.net/van-tai-co-trung-quoc-lan-dau-bay-thu-sau-hon-10-nam-lo-dien-4994747.html> {'audio_url': 'https://lake-api.actable.ai/tts-data/reqhhfcp-2025-12-17%2004%3A31%3A27.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=pmq7GsXVsXQZXqTM0hWE%2F20251217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251217T043501Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=efe93be11ea1d4f896ff6620c13a3bfbc8ed4b03bd331db099179212291342cd', 'author': 'Phạm Giang', 'category': 'Thế giới', 'content': 'Video được công bố ngày 16/12 cho thấy vận tải cơ hạng trung hế ' 'hệ mới của Trung Quốc, thường được gọi là Y-30, lần đầu xuất hiện ' 'trên bầu trời thành phố Tây An. Phi cơ được gắn cảm biến dữ liệu ' 'không khí ở mũi, thiết bị thường xuất hiện trên những nguyên mẫu ' 'bay thử để thu thập thông tin. Nguyên mẫu Y-30 được trang bị 4 ' 'động cơ tua-bin cánh quạt, có hình dạng bên ngoài tương đồng với ' 'máy bay Airbus A400M những kích thước nhỏ hơn. Chưa rõ nó sử dụng ' 'động cơ nào, có khả năng là biến thể của dòng WJ-6 trang bị trên ' 'vận tải cơ Y-8, Y-9 và máy bay cảnh báo sớm KJ-600. Giới chức ' 'Trung Quốc chưa bình luận về thông tin. Giới phân tích quân sự ' 'nhận định Y-30 có tải trọng 25-30 tấn, cao hơn mức 20-25 tấn của ' 'mẫu Y-8 và Y-9 trong biên chế không quân Trung Quốc. Phi cơ được ' 'cho là cùng phân hạng về kích thước với dòng C-130 Mỹ, với khối ' 'lượng cất cánh tối đa 80 tấn và tầm bay 6.000-7.000 km khi mang ' 'đầy tải. Thông tin về dự án Y-30 lần đầu xuất hiện từ năm 2014, ' 'khi mô hình máy bay vận tải hạng trung được trưng bày tại triển ' 'lãm hàng không Chu Hải. Giới chức Trung Quốc khi đó cho biết ' 'chương trình đang trong khâu thiết kế ý tưởng và dự kiến bước ' 'sang giai đoạn phát triển toàn diện sau đó hai năm, với mục tiêu ' 'biên chế vào năm 2020. Trung Quốc gần đây hé lộ hàng loạt khí tài ' 'mới, trong đó có tiêm kích J-36 và J-XDS, máy bay cảnh báo sớm ' 'KJ-3000 và các phi cơ không người lái vũ trang.', 'description': 'Vận tải cơ hạng trung Y-30 của Trung Quốc bay thử tại thành ' 'phố Tây An, lần đầu tiên kể từ khi ra mắt hồi năm 2014.', 'html_content': '
\n' '

Video được công bố ngày 16/12 cho thấy vận ' 'tải cơ hạng trung hế hệ mới của Trung Quốc, thường được gọi ' 'là Y-30, lần đầu xuất hiện trên bầu trời thành phố Tây An. ' 'Phi cơ được gắn cảm biến dữ liệu không khí ở mũi, thiết bị ' 'thường xuất hiện trên những nguyên mẫu bay thử để thu thập ' 'thông tin.

Nguyên mẫu Y-30 được trang ' 'bị 4 động cơ tua-bin cánh quạt, có hình dạng bên ngoài tương ' 'đồng với máy bay Airbus A400M những kích thước nhỏ hơn. Chưa ' 'rõ nó sử dụng động cơ nào, có khả năng là biến thể của dòng ' 'WJ-6 trang bị trên vận tải cơ Y-8, Y-9 và máy bay cảnh báo ' 'sớm KJ-600.

Giới chức Trung Quốc chưa ' 'bình luận về thông tin.

\n' '
\n' '\n' '
\n' '
\n' '\n' '
\n' '
\xa0
\n' '
\xa0
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '\n' '
\n' '
\n' '
\n' '\n' '
\n' '
\n' '
\n' '\n' '
\n' '

Vận tải cơ Y-30 Trung Quốc bay thử tại Tây ' 'An trong video đăng ngày 16/12. Video: ' 'X/WZZJWZ

\n' '

Giới ' 'phân tích quân sự nhận định Y-30 có tải trọng 25-30 tấn, cao ' 'hơn mức 20-25 tấn của mẫu Y-8 và Y-9 trong biên chế không ' 'quân Trung Quốc. Phi cơ được cho là cùng phân hạng về kích ' 'thước với dòng C-130 Mỹ, với khối lượng cất cánh tối đa 80 ' 'tấn và tầm bay 6.000-7.000 km khi mang đầy tải.

Thông tin về dự án Y-30 lần đầu xuất hiện từ ' 'năm 2014, khi mô hình máy bay vận tải hạng trung được trưng ' 'bày tại triển lãm hàng không Chu Hải. Giới chức Trung Quốc ' 'khi đó cho biết chương trình đang trong khâu thiết kế ý ' 'tưởng và dự kiến bước sang giai đoạn phát triển toàn diện ' 'sau đó hai năm, với mục tiêu biên chế vào năm 2020.

Trung Quốc gần đây hé lộ hàng loạt khí tài ' 'mới, trong đó có tiêm kích J-36 và J-XDS, máy bay cảnh báo ' 'sớm KJ-3000 và các phi cơ không người lái vũ trang.

Phạm ' 'Giang (Theo Aviationist)

\n' '\n' '\n' '\n' '\n' '
', 'md_content': '\n' 'Video được công bố ngày 16/12 cho thấy vận tải cơ hạng trung ' 'hế hệ mới của Trung Quốc, thường được gọi là Y-30, lần đầu ' 'xuất hiện trên bầu trời thành phố Tây An. Phi cơ được gắn cảm ' 'biến dữ liệu không khí ở mũi, thiết bị thường xuất hiện trên ' 'những nguyên mẫu bay thử để thu thập thông tin.\n' '\n' 'Nguyên mẫu Y-30 được trang bị 4 động cơ tua-bin cánh quạt, có ' 'hình dạng bên ngoài tương đồng với máy bay Airbus A400M những ' 'kích thước nhỏ hơn. Chưa rõ nó sử dụng động cơ nào, có khả ' 'năng là biến thể của dòng WJ-6 trang bị trên vận tải cơ Y-8, ' 'Y-9 và máy bay cảnh báo sớm KJ-600.\n' '\n' 'Giới chức Trung Quốc chưa bình luận về thông tin.\n' '\n' '\n' '\n' '\n' '\n' '\n' '![Vận tải cơ thế hệ mới của Trung Quốc lần đầu cất ' 'cánh](https://iv1.vnecdn.net/vnexpress/images/web/2025/12/17/van-tai-co-the-he-moi-cua-trung-quoc-lan-dau-cat-canh-1765939189.jpg?w=0&h=0&q=100&dpr=1&fit=crop&s=ybQ36qGXzS9gPOp6SrgMAw)\n' '\n' '\xa0\n' '\xa0\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' 'Vận tải cơ thế hệ mới của Trung Quốc lần đầu cất cánh\n' '\n' '\n' '\n' '\n' '\n' 'Vận tải cơ Y-30 Trung Quốc bay thử tại Tây An trong video đăng ' 'ngày 16/12. Video: *X/WZZJWZ*\n' '\n' '\n' 'Giới phân tích quân sự nhận định Y-30 có tải trọng 25-30 tấn, ' 'cao hơn mức 20-25 tấn của mẫu Y-8 và Y-9 trong biên chế không ' 'quân Trung Quốc. Phi cơ được cho là cùng phân hạng về kích ' 'thước với dòng C-130 Mỹ, với khối lượng cất cánh tối đa 80 tấn ' 'và tầm bay 6.000-7.000 km khi mang đầy tải.\n' '\n' 'Thông tin về dự án Y-30 lần đầu xuất hiện từ năm 2014, khi mô ' 'hình máy bay vận tải hạng trung được trưng bày tại triển lãm ' 'hàng không Chu Hải. Giới chức Trung Quốc khi đó cho biết ' 'chương trình đang trong khâu thiết kế ý tưởng và dự kiến bước ' 'sang giai đoạn phát triển toàn diện sau đó hai năm, với mục ' 'tiêu biên chế vào năm 2020.\n' '\n' 'Trung Quốc gần đây hé lộ hàng loạt khí tài mới, trong đó có ' 'tiêm kích J-36 và J-XDS, máy bay cảnh báo sớm KJ-3000 và các ' 'phi cơ không người lái vũ trang.\n' '\n' '**Phạm Giang** (Theo *Aviationist*)\n' '\n' '\n' '\n' '\n' '\n' '\n', 'published_date': datetime.date(2025, 12, 17), 'published_timestamp': datetime.datetime(2025, 12, 17, 11, 29, 29), 'source': 'VnExpress', 'tags': ['Y-30', 'Trung Quốc', 'vận tải cơ hạng trung', 'máy bay', 'cảm biến dữ liệu không khí', 'động cơ tua-bin cánh quạt', 'Airbus A400M', 'WJ-6', 'Y-8', 'Y-9', 'KJ-600', 'tải trọng', 'C-130', 'khối lượng cất cánh', 'tầm bay', 'dự án Y-30', 'triển lãm hàng không Chu Hải', 'thiết kế', 'khí tài mới', 'tiêm kích J-36', 'J-XDS', 'KJ-3000', 'máy bay không người lái vũ trang'], 'title': 'Vận tải cơ Trung Quốc lần đầu bay thử sau hơn 10 năm lộ diện', 'url': 'https://vnexpress.net/van-tai-co-trung-quoc-lan-dau-bay-thu-sau-hon-10-nam-lo-dien-4994747.html', 'voice': 'HN-Nam-1-BL'} 2025-12-17 04:35:03 [scrapy.extensions.logstats] INFO: Crawled 4 pages (at 4 pages/min), scraped 1 items (at 1 items/min) 2025-12-17 04:35:03 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:03 [vnexpress_timestamp] INFO: 2025-12-17 10:19:24 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:06 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:06 [vnexpress_timestamp] INFO: 2025-12-17 10:25:02 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:08 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:08 [vnexpress_timestamp] INFO: 2025-12-17 10:30:00 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:10 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:11 [vnexpress_timestamp] INFO: 2025-12-17 10:00:00 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:11 [scrapy.extensions.logstats] INFO: Crawled 8 pages (at 4 pages/min), scraped 1 items (at 0 items/min) 2025-12-17 04:35:13 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:13 [vnexpress_timestamp] INFO: 2025-12-17 10:05:24 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:16 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:16 [vnexpress_timestamp] INFO: 2025-12-17 10:06:47 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:19 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:19 [vnexpress_timestamp] INFO: 2025-12-17 10:07:48 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:22 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:22 [vnexpress_timestamp] INFO: 2025-12-17 10:10:04 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:24 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:24 [vnexpress_timestamp] INFO: 2025-12-17 10:12:32 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:25 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:25 [vnexpress_timestamp] INFO: 2025-12-17 10:15:00 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:28 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:28 [vnexpress_timestamp] INFO: 2025-12-17 10:15:00 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:31 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:31 [vnexpress_timestamp] INFO: 2025-12-17 10:16:31 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:33 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:33 [vnexpress_timestamp] INFO: 2025-12-17 10:17:24 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:36 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:36 [vnexpress_timestamp] INFO: 2025-12-17 10:38:29 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:39 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:39 [vnexpress_timestamp] INFO: 2025-12-17 10:38:49 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:41 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:41 [vnexpress_timestamp] INFO: 2025-12-17 10:47:09 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:43 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:43 [vnexpress_timestamp] INFO: 2025-12-17 11:00:00 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:45 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:45 [vnexpress_timestamp] INFO: 2025-12-17 11:00:00 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:48 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:48 [vnexpress_timestamp] INFO: 2025-12-17 11:00:00 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:50 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:50 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://vnexpress.net/tin-tuc-24h) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/vnexpress_timestamp_spider.py", line 67, in parse_article article_valid = item.parse_metadata_with_xpath( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 184, in parse_metadata_with_xpath published_date = dparser.parse(published_date_raw, dayfirst=day_first, ignoretz=True, fuzzy=True).date() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/dateutil/parser/_parser.py", line 1368, in parse return DEFAULTPARSER.parse(timestr, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/dateutil/parser/_parser.py", line 643, in parse raise ParserError("Unknown string format: %s", timestr) dateutil.parser._parser.ParserError: Unknown string format: 2025-12-17 11:00 + 07:00 2025-12-17 04:35:53 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:53 [scrapy.core.scraper] ERROR: Spider error processing (referer: https://vnexpress.net/tin-tuc-24h) Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/scrapy/utils/defer.py", line 279, in iter_errback yield next(it) ^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/utils/python.py", line 350, in __next__ return next(self.data) ^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 352, in return (self._set_referer(r, response) for r in result or ()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/usr/local/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 106, in process_sync for r in iterable: File "/opt/scrapy_projects/news_scraper/spiders/vnexpress_timestamp_spider.py", line 67, in parse_article article_valid = item.parse_metadata_with_xpath( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/scrapy_projects/news_scraper/items.py", line 184, in parse_metadata_with_xpath published_date = dparser.parse(published_date_raw, dayfirst=day_first, ignoretz=True, fuzzy=True).date() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/dateutil/parser/_parser.py", line 1368, in parse return DEFAULTPARSER.parse(timestr, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/dateutil/parser/_parser.py", line 643, in parse raise ParserError("Unknown string format: %s", timestr) dateutil.parser._parser.ParserError: Unknown string format: 2025-12-17 11:00 + 07:00 2025-12-17 04:35:55 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:55 [vnexpress_timestamp] INFO: 2025-12-17 11:00:00 smaller than 2025-12-17 11:15:00 2025-12-17 04:35:57 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:35:57 [vnexpress_timestamp] INFO: 2025-12-17 11:03:34 smaller than 2025-12-17 11:15:00 2025-12-17 04:36:00 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:36:00 [vnexpress_timestamp] INFO: 2025-12-17 11:06:31 smaller than 2025-12-17 11:15:00 2025-12-17 04:36:01 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:36:01 [vnexpress_timestamp] INFO: 2025-12-17 11:10:37 smaller than 2025-12-17 11:15:00 2025-12-17 04:36:04 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:36:04 [vnexpress_timestamp] INFO: 2025-12-17 11:13:57 smaller than 2025-12-17 11:15:00 2025-12-17 04:36:07 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:36:07 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: GPT Image 1.5 bắt đầu được triển khai cho mọi người dùng ChatGPT và thông qua API (giao diện lập trình ứng dụng) từ tuần này. Tương tự Nano Banana Pro của Google, GPT Image 1.5 cung cấp các tính năng hậu kỳ, cho phép kiểm soát chỉnh sửa chi tiết hơn để duy trì tính nhất quán như độ giống của khuôn mặt, ánh sáng, bố cục, tông màu xuyên suốt quá trình chỉnh sửa. Đây được coi là bước tiến lớn vì đa số AI tạo ảnh đều kém ở khả năng lặp lại. Khi người dùng yêu cầu chỉnh sửa, ví dụ điều chỉnh biểu cảm khuôn mặt hay làm ánh sáng lạnh hơn, các mô hình thường diễn giải lại toàn bộ hình ảnh, dẫn đến sự thiếu nhất quán. Ngoài những tính năng mới, bản cập nhật còn cho phép người dùng truy cập tính năng tạo ảnh thông qua một mục riêng ở thanh công cụ của ChatGPT. Theo Fidji Simo, Giám đốc điều hành mảng ứng dụng tại OpenAI, ChatGPT giờ có thể hoạt động như một studio sáng tạo. "Giao diện xem và chỉnh sửa ảnh mới giúp bạn dễ dàng tạo ra những hình ảnh đúng với tưởng tượng hoặc lấy cảm hứng từ những câu lệnh (prompt) thịnh hành và bộ lọc cài sẵn", ông nói. Ngoài cải tiến công cụ tạo ảnh, OpenAI cũng tìm cách nâng cấp trải nghiệm ChatGPT với nhiều yếu tố trực quan hơn. Theo Simo, công ty dự định hiển thị nhiều hình ảnh hơn kèm nguồn rõ ràng trong các truy vấn tìm kiếm, hữu ích với những tác vụ như chuyển đổi đơn vị đo hay kiểm tra tỷ số thể thao. "Khi sáng tạo, bạn nên được thấy và định hình thứ mình đang làm. Khi hình ảnh truyền tải câu chuyện tốt hơn chỉ có từ ngữ, ChatGPT nên đưa chúng vào", Simo viết. GPT Image 1.5 là động thái mới nhất của OpenAI, sau khi tung ra mô hình GPT-5.2 , trong cuộc cạnh tranh với Google. Tháng trước, Sam Altman, CEO OpenAI, kích hoạt tình trạng " báo động đỏ ", đề ra kế hoạch đảm bảo vị thế dẫn đầu trong lĩnh vực AI sau khi Google công bố Gemini 3 và trình tạo ảnh Nano Banana Pro, đều đứng đầu về nhiều tiêu chí đánh giá trên bảng xếp hạng LMArena.'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2025-12-17 04:36:07 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2025-12-17 04:36:07 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2025-12-17 04:36:07 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2025-12-17 04:36:07 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2025-12-17 04:36:07 [httpcore.connection] DEBUG: start_tls.complete return_value= 2025-12-17 04:36:07 [httpcore.http11] DEBUG: send_request_headers.started request= 2025-12-17 04:36:07 [httpcore.http11] DEBUG: send_request_headers.complete 2025-12-17 04:36:07 [httpcore.http11] DEBUG: send_request_body.started request= 2025-12-17 04:36:07 [httpcore.http11] DEBUG: send_request_body.complete 2025-12-17 04:36:07 [httpcore.http11] DEBUG: receive_response_headers.started request= 2025-12-17 04:36:12 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Wed, 17 Dec 2025 04:36:12 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-expose-headers', b'X-Request-ID'), (b'openai-organization', b'user-bmggli0qfnphtzkdehrnfdrn'), (b'openai-processing-ms', b'4089'), (b'openai-project', b'proj_AqBCEfNib7E5LbrMYDz2oklk'), (b'openai-version', b'2020-10-01'), (b'x-envoy-upstream-service-time', b'4342'), (b'x-ratelimit-limit-requests', b'30000'), (b'x-ratelimit-limit-tokens', b'150000000'), (b'x-ratelimit-remaining-requests', b'29999'), (b'x-ratelimit-remaining-tokens', b'149999257'), (b'x-ratelimit-reset-requests', b'2ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_4a0d15adcde544c5b4224bd1b10e2627'), (b'x-openai-proxy-wasm', b'v0.1'), (b'cf-cache-status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=b5BBFlIEbyEBLvV6GGznJSKpYzjCeNz76EiVa_Tpf3M-1765946172-1.0.1.1-LWUAi._rDPeMjTWKCiM6fUFXvEkvZCSSwvBvvKJUgBOEoFoaIXWf.XKmOD_UCKey0Wcsu.yx3aod.ADqCt6Qz257scqW52Xq8TvWII5d3SA; path=/; expires=Wed, 17-Dec-25 05:06:12 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'Set-Cookie', b'_cfuvid=7._brH20v5iwpXLMdUviuFz6eBGPle_P_euAx7T6wJU-1765946172331-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9af3b7bcad5d2104-HKG'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2025-12-17 04:36:12 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" 2025-12-17 04:36:12 [httpcore.http11] DEBUG: receive_response_body.started request= 2025-12-17 04:36:12 [httpcore.http11] DEBUG: receive_response_body.complete 2025-12-17 04:36:12 [httpcore.http11] DEBUG: response_closed.started 2025-12-17 04:36:12 [httpcore.http11] DEBUG: response_closed.complete 2025-12-17 04:36:12 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers([('date', 'Wed, 17 Dec 2025 04:36:12 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('access-control-expose-headers', 'X-Request-ID'), ('openai-organization', 'user-bmggli0qfnphtzkdehrnfdrn'), ('openai-processing-ms', '4089'), ('openai-project', 'proj_AqBCEfNib7E5LbrMYDz2oklk'), ('openai-version', '2020-10-01'), ('x-envoy-upstream-service-time', '4342'), ('x-ratelimit-limit-requests', '30000'), ('x-ratelimit-limit-tokens', '150000000'), ('x-ratelimit-remaining-requests', '29999'), ('x-ratelimit-remaining-tokens', '149999257'), ('x-ratelimit-reset-requests', '2ms'), ('x-ratelimit-reset-tokens', '0s'), ('x-request-id', 'req_4a0d15adcde544c5b4224bd1b10e2627'), ('x-openai-proxy-wasm', 'v0.1'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=b5BBFlIEbyEBLvV6GGznJSKpYzjCeNz76EiVa_Tpf3M-1765946172-1.0.1.1-LWUAi._rDPeMjTWKCiM6fUFXvEkvZCSSwvBvvKJUgBOEoFoaIXWf.XKmOD_UCKey0Wcsu.yx3aod.ADqCt6Qz257scqW52Xq8TvWII5d3SA; path=/; expires=Wed, 17-Dec-25 05:06:12 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('x-content-type-options', 'nosniff'), ('set-cookie', '_cfuvid=7._brH20v5iwpXLMdUviuFz6eBGPle_P_euAx7T6wJU-1765946172331-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '9af3b7bcad5d2104-HKG'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) 2025-12-17 04:36:12 [openai._base_client] DEBUG: request_id: req_4a0d15adcde544c5b4224bd1b10e2627 2025-12-17 04:36:12 [vnexpress_timestamp] INFO: Min timestamp: 2025-12-17 11:15:00, Published timestamp: 2025-12-17 11:15:26 2025-12-17 04:36:12 [urllib3.connectionpool] DEBUG: Starting new HTTP connection (1): tts-api:4444 2025-12-17 04:39:26 [urllib3.connectionpool] DEBUG: http://tts-api:4444 "POST /api/v2/text-to-speech HTTP/1.1" 200 411 2025-12-17 04:39:26 [scrapy.core.scraper] DEBUG: Scraped from <200 https://vnexpress.net/chatgpt-images-moi-tao-anh-nhanh-gap-bon-lan-4994842.html> {'audio_url': 'https://lake-api.actable.ai/tts-data/ccqlywza-2025-12-17%2004%3A36%3A12.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=pmq7GsXVsXQZXqTM0hWE%2F20251217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251217T043923Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=e61839039829fd4a3ac2ce0737683c3904055f5469830a467759d625d4426ff6', 'author': 'Thu Thảo', 'category': 'Khoa học công nghệ', 'content': 'GPT Image 1.5 bắt đầu được triển khai cho mọi người dùng ChatGPT ' 'và thông qua API (giao diện lập trình ứng dụng) từ tuần này. ' 'Tương tự Nano Banana Pro của Google, GPT Image 1.5 cung cấp các ' 'tính năng hậu kỳ, cho phép kiểm soát chỉnh sửa chi tiết hơn để ' 'duy trì tính nhất quán như độ giống của khuôn mặt, ánh sáng, bố ' 'cục, tông màu xuyên suốt quá trình chỉnh sửa. Đây được coi là ' 'bước tiến lớn vì đa số AI tạo ảnh đều kém ở khả năng lặp lại. Khi ' 'người dùng yêu cầu chỉnh sửa, ví dụ điều chỉnh biểu cảm khuôn mặt ' 'hay làm ánh sáng lạnh hơn, các mô hình thường diễn giải lại toàn ' 'bộ hình ảnh, dẫn đến sự thiếu nhất quán. Ngoài những tính năng ' 'mới, bản cập nhật còn cho phép người dùng truy cập tính năng tạo ' 'ảnh thông qua một mục riêng ở thanh công cụ của ChatGPT. Theo ' 'Fidji Simo, Giám đốc điều hành mảng ứng dụng tại OpenAI, ChatGPT ' 'giờ có thể hoạt động như một studio sáng tạo. "Giao diện xem và ' 'chỉnh sửa ảnh mới giúp bạn dễ dàng tạo ra những hình ảnh đúng với ' 'tưởng tượng hoặc lấy cảm hứng từ những câu lệnh (prompt) thịnh ' 'hành và bộ lọc cài sẵn", ông nói. Ngoài cải tiến công cụ tạo ảnh, ' 'OpenAI cũng tìm cách nâng cấp trải nghiệm ChatGPT với nhiều yếu ' 'tố trực quan hơn. Theo Simo, công ty dự định hiển thị nhiều hình ' 'ảnh hơn kèm nguồn rõ ràng trong các truy vấn tìm kiếm, hữu ích ' 'với những tác vụ như chuyển đổi đơn vị đo hay kiểm tra tỷ số thể ' 'thao. "Khi sáng tạo, bạn nên được thấy và định hình thứ mình đang ' 'làm. Khi hình ảnh truyền tải câu chuyện tốt hơn chỉ có từ ngữ, ' 'ChatGPT nên đưa chúng vào", Simo viết. GPT Image 1.5 là động thái ' 'mới nhất của OpenAI, sau khi tung ra mô hình GPT-5.2 , trong cuộc ' 'cạnh tranh với Google. Tháng trước, Sam Altman, CEO OpenAI, kích ' 'hoạt tình trạng " báo động đỏ ", đề ra kế hoạch đảm bảo vị thế ' 'dẫn đầu trong lĩnh vực AI sau khi Google công bố Gemini 3 và ' 'trình tạo ảnh Nano Banana Pro, đều đứng đầu về nhiều tiêu chí ' 'đánh giá trên bảng xếp hạng LMArena.', 'description': 'OpenAI ra bản cập nhật GPT Image 1.5 với khả năng tuân thủ ' 'hướng dẫn tốt hơn, chỉnh sửa chính xác hơn và tốc độ tạo ảnh ' 'nhanh hơn bốn lần so với bản cũ.', 'html_content': '
\n' '

GPT Image 1.5 bắt đầu được triển khai cho ' 'mọi người dùng ChatGPT và thông qua API (giao diện lập trình ' 'ứng dụng) từ tuần này. Tương tự Nano Banana Pro của Google, GPT Image 1.5 ' 'cung cấp các tính năng hậu kỳ, cho phép kiểm soát chỉnh sửa ' 'chi tiết hơn để duy trì tính nhất quán như độ giống của ' 'khuôn mặt, ánh sáng, bố cục, tông màu xuyên suốt quá trình ' 'chỉnh sửa.

Đây được coi là bước tiến ' 'lớn vì đa số AI tạo ảnh đều kém ở khả năng lặp lại. Khi ' 'người dùng yêu cầu chỉnh sửa, ví dụ điều chỉnh biểu cảm ' 'khuôn mặt hay làm ánh sáng lạnh hơn, các mô hình thường diễn ' 'giải lại toàn bộ hình ảnh, dẫn đến sự thiếu nhất ' 'quán.

\n' '
\n' '\n' '
\n' '
\n' '\n' '
\n' '
\xa0
\n' '
\xa0
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '
\n' '\n' '
\n' '
\n' '
\n' '\n' '
\n' '
\n' '
\n' '\n' '
\n' '

Một số hình ảnh tạo bằng GPT Image 1.5. ' 'Video: OpenAI

\n' '

Ngoài ' 'những tính năng mới, bản cập nhật còn cho phép người dùng ' 'truy cập tính năng tạo ảnh thông qua một mục riêng ở thanh ' 'công cụ của ChatGPT. Theo Fidji Simo, Giám đốc điều hành ' 'mảng ứng dụng tại OpenAI, ChatGPT giờ có thể hoạt động như ' 'một studio sáng tạo. "Giao diện xem và chỉnh sửa ảnh mới ' 'giúp bạn dễ dàng tạo ra những hình ảnh đúng với tưởng tượng ' 'hoặc lấy cảm hứng từ những câu lệnh (prompt) thịnh hành và ' 'bộ lọc cài sẵn", ông nói.

Ngoài cải ' 'tiến công cụ tạo ảnh, OpenAI cũng tìm cách nâng cấp trải ' 'nghiệm ChatGPT với nhiều yếu tố trực quan hơn. Theo Simo, ' 'công ty dự định hiển thị nhiều hình ảnh hơn kèm nguồn rõ ' 'ràng trong các truy vấn tìm kiếm, hữu ích với những tác vụ ' 'như chuyển đổi đơn vị đo hay kiểm tra tỷ số thể thao. "Khi ' 'sáng tạo, bạn nên được thấy và định hình thứ mình đang làm. ' 'Khi hình ảnh truyền tải câu chuyện tốt hơn chỉ có từ ngữ, ' 'ChatGPT nên đưa chúng vào", Simo viết.

GPT Image 1.5 là động thái mới nhất của ' 'OpenAI, sau khi tung ra mô hình GPT-5.2, trong cuộc cạnh tranh với ' 'Google. Tháng trước, Sam Altman, CEO OpenAI, kích hoạt tình ' 'trạng "báo động đỏ", đề ra kế hoạch đảm bảo vị ' 'thế dẫn đầu trong lĩnh vực AI sau khi Google công bố Gemini ' '3 và trình tạo ảnh Nano Banana Pro, đều đứng đầu về nhiều ' 'tiêu chí đánh giá trên bảng xếp hạng LMArena.

Thu ' 'Thảo (Theo TechCrunch, The Verge)

\n' '\n' '\n' '\n' '\n' '
', 'md_content': '\n' 'GPT Image 1.5 bắt đầu được triển khai cho mọi người dùng ' 'ChatGPT và thông qua API (giao diện lập trình ứng dụng) từ ' 'tuần này. Tương tự [Nano Banana ' 'Pro](https://vnexpress.net/cach-dung-ai-tao-anh-nano-banana-pro-cua-google-gemini-4987998.html) ' 'của Google, GPT Image 1.5 cung cấp các tính năng hậu kỳ, cho ' 'phép kiểm soát chỉnh sửa chi tiết hơn để duy trì tính nhất ' 'quán như độ giống của khuôn mặt, ánh sáng, bố cục, tông màu ' 'xuyên suốt quá trình chỉnh sửa.\n' '\n' 'Đây được coi là bước tiến lớn vì đa số AI tạo ảnh đều kém ở ' 'khả năng lặp lại. Khi người dùng yêu cầu chỉnh sửa, ví dụ điều ' 'chỉnh biểu cảm khuôn mặt hay làm ánh sáng lạnh hơn, các mô ' 'hình thường diễn giải lại toàn bộ hình ảnh, dẫn đến sự thiếu ' 'nhất quán.\n' '\n' '\n' '\n' '\n' '\n' '\n' '![Phiên bản ChatGPT Images mới tạo ảnh nhanh gấp 4 ' 'lần](https://iv1.vnecdn.net/vnexpress/images/web/2025/12/17/phien-ban-chatgpt-images-moi-tao-anh-nhanh-gap-4-lan-1765944115.jpg?w=0&h=0&q=100&dpr=1&fit=crop&s=VV_a1-ACmmddEkPrvVZkPw)\n' '\n' '\xa0\n' '\xa0\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' 'Phiên bản ChatGPT Images mới tạo ảnh nhanh gấp 4 lần\n' '\n' '\n' '\n' '\n' '\n' 'Một số hình ảnh tạo bằng GPT Image 1.5. Video: *OpenAI*\n' '\n' '\n' 'Ngoài những tính năng mới, bản cập nhật còn cho phép người ' 'dùng truy cập tính năng tạo ảnh thông qua một mục riêng ở ' 'thanh công cụ của ChatGPT. Theo Fidji Simo, Giám đốc điều hành ' 'mảng ứng dụng tại OpenAI, ChatGPT giờ có thể hoạt động như một ' 'studio sáng tạo. "Giao diện xem và chỉnh sửa ảnh mới giúp bạn ' 'dễ dàng tạo ra những hình ảnh đúng với tưởng tượng hoặc lấy ' 'cảm hứng từ những câu lệnh (prompt) thịnh hành và bộ lọc cài ' 'sẵn", ông nói.\n' '\n' 'Ngoài cải tiến công cụ tạo ảnh, OpenAI cũng tìm cách nâng cấp ' 'trải nghiệm ChatGPT với nhiều yếu tố trực quan hơn. Theo Simo, ' 'công ty dự định hiển thị nhiều hình ảnh hơn kèm nguồn rõ ràng ' 'trong các truy vấn tìm kiếm, hữu ích với những tác vụ như ' 'chuyển đổi đơn vị đo hay kiểm tra tỷ số thể thao. "Khi sáng ' 'tạo, bạn nên được thấy và định hình thứ mình đang làm. Khi ' 'hình ảnh truyền tải câu chuyện tốt hơn chỉ có từ ngữ, ChatGPT ' 'nên đưa chúng vào", Simo viết.\n' '\n' 'GPT Image 1.5 là động thái mới nhất của OpenAI, sau khi tung ' 'ra mô hình ' '[GPT-5.2](https://vnexpress.net/openai-ra-gpt-5-2-sau-khi-bat-bao-dong-do-4992990.html), ' 'trong cuộc cạnh tranh với Google. Tháng trước, Sam Altman, CEO ' 'OpenAI, kích hoạt tình trạng "[báo động ' 'đỏ](https://vnexpress.net/openai-bat-bao-dong-do-sau-khi-chatgpt-bi-gemini-qua-mat-4989017.html)", ' 'đề ra kế hoạch đảm bảo vị thế dẫn đầu trong lĩnh vực AI sau ' 'khi Google công bố Gemini 3 và trình tạo ảnh Nano Banana Pro, ' 'đều đứng đầu về nhiều tiêu chí đánh giá trên bảng xếp hạng ' 'LMArena.\n' '\n' '**Thu Thảo** (Theo *TechCrunch, The Verge*)\n' '\n' '\n' '\n' '\n' '\n' '\n', 'published_date': datetime.date(2025, 12, 17), 'published_timestamp': datetime.datetime(2025, 12, 17, 11, 15, 26), 'source': 'VnExpress', 'tags': ['GPT Image 1.5', 'ChatGPT', 'API', 'Hậu kỳ', 'Chỉnh sửa hình ảnh', 'Tính nhất quán', 'AI tạo ảnh', 'Biểu cảm khuôn mặt', 'Ánh sáng', 'Bố cục', 'Tông màu', 'Studio sáng tạo', 'Giao diện xem và chỉnh sửa', 'Tưởng tượng', 'Prompt', 'Bộ lọc cài sẵn', 'Trải nghiệm người dùng', 'Hình ảnh trực quan', 'Tìm kiếm', 'OpenAI', 'Gemini 3', 'Nano Banana Pro', 'Cạnh tranh AI', 'LMArena'], 'title': 'ChatGPT Images mới tạo ảnh nhanh gấp bốn lần', 'url': 'https://vnexpress.net/chatgpt-images-moi-tao-anh-nhanh-gap-bon-lan-4994842.html', 'voice': 'SG-Nam-1-TM'} 2025-12-17 04:39:26 [scrapy.extensions.logstats] INFO: Crawled 31 pages (at 23 pages/min), scraped 2 items (at 1 items/min) 2025-12-17 04:39:26 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:39:26 [httpcore.connection] DEBUG: close.started 2025-12-17 04:39:26 [httpcore.connection] DEBUG: close.complete 2025-12-17 04:39:26 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., 'the', 'and', 'is') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Ngày 17/12, ông Đỗ Văn Mỹ, hiệu trưởng Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy, xã Kim Ngân, cho hay đã nhận quyết định xử phạt của Ủy ban nhân dân tỉnh đối với 3 hành vi vi phạm, tổng mức phạt 196,5 triệu đồng. Tuy nhiên, số tiền này vượt quá khả năng chi trả nên nhà trường đã có tờ trình gửi Ủy ban nhân dân xã Kim Ngân đề nghị hỗ trợ kinh phí nộp phạt. Trước đó, khoảng 16h30 ngày 25/9, bếp ăn của trường chế biến món cá chim kho cho 75 học sinh ăn bữa tối. Sáng hôm sau, 41 em xuất hiện triệu chứng ngộ độc thực phẩm và được đưa đi điều trị tại Bệnh viện Đa khoa khu vực Lệ Thủy. Kết quả xét nghiệm của Viện Pasteur Nha Trang xác định mẫu cá chim kho nhiễm chủng Bacillus cereus sinh độc tố NHE và HBL, là nguyên nhân gây ngộ độc thực phẩm. Sở Y tế xác minh hành vi vi phạm của Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy chưa đến mức truy cứu trách nhiệm hình sự. Nhà trường bị phạt 170 triệu đồng do vi phạm quy định về an toàn thực phẩm. Ngoài ra, ông Đỗ Văn Mỹ, với tư cách chủ cơ sở bếp ăn của trường, bị phạt 15,5 triệu đồng vì không có giấy xác nhận tập huấn kiến thức an toàn thực phẩm. Tại thời điểm xảy ra vụ việc, trường sử dụng 2 người nấu ăn không có giấy xác nhận tập huấn kiến thức về an toàn thực phẩm, bị xử phạt thêm 11 triệu đồng. Thời hạn khắc phục hậu quả là 10 ngày kể từ ngày nhận quyết định xử phạt; quá thời hạn, đơn vị vi phạm sẽ bị cưỡng chế thi hành và phải nộp thêm 0,05% mỗi ngày trên số tiền phạt chưa nộp. Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy hiện có 199 học sinh, trong đó 75 em học bán trú từ thứ hai đến thứ sáu hằng tuần. Sau vụ ngộ độc, nhiều phụ huynh cho con nghỉ học nhiều buổi để phản đối một phó hiệu trưởng; Ủy ban nhân dân xã Kim Ngân đã 2 lần đình chỉ công tác nữ phó hiệu trưởng, mỗi lần 15 ngày, để xác minh."}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2025-12-17 04:39:26 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2025-12-17 04:39:26 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2025-12-17 04:39:26 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2025-12-17 04:39:26 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2025-12-17 04:39:26 [httpcore.connection] DEBUG: start_tls.complete return_value= 2025-12-17 04:39:26 [httpcore.http11] DEBUG: send_request_headers.started request= 2025-12-17 04:39:26 [httpcore.http11] DEBUG: send_request_headers.complete 2025-12-17 04:39:26 [httpcore.http11] DEBUG: send_request_body.started request= 2025-12-17 04:39:26 [httpcore.http11] DEBUG: send_request_body.complete 2025-12-17 04:39:26 [httpcore.http11] DEBUG: receive_response_headers.started request= 2025-12-17 04:39:28 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Wed, 17 Dec 2025 04:39:28 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-expose-headers', b'X-Request-ID'), (b'openai-organization', b'user-bmggli0qfnphtzkdehrnfdrn'), (b'openai-processing-ms', b'1715'), (b'openai-project', b'proj_AqBCEfNib7E5LbrMYDz2oklk'), (b'openai-version', b'2020-10-01'), (b'x-envoy-upstream-service-time', b'1729'), (b'x-ratelimit-limit-requests', b'30000'), (b'x-ratelimit-limit-tokens', b'150000000'), (b'x-ratelimit-remaining-requests', b'29999'), (b'x-ratelimit-remaining-tokens', b'149999275'), (b'x-ratelimit-reset-requests', b'2ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_a328cde49e4b4992828bb91bbe9cb807'), (b'x-openai-proxy-wasm', b'v0.1'), (b'cf-cache-status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=RMjjCrcQi_R8E8NcXv7SMkaxGRlUarNGJRtHpAqmy6Y-1765946368-1.0.1.1-Ek6tj..b2cpJj7EcZmooL8.M_l9nxXhKgr91kHUdEdcUtocs5hISFUAhY969gytV.9MSnj8NW4tgQ8CP34n9UNNtz9sVKQjIiCbCfJmG1bQ; path=/; expires=Wed, 17-Dec-25 05:09:28 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'Set-Cookie', b'_cfuvid=igjL9sNHR6qBvkbcclUVPl_JBW3yEbSJFWjDc8bo4TI-1765946368865-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9af3bc99491edd42-HKG'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2025-12-17 04:39:28 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" 2025-12-17 04:39:28 [httpcore.http11] DEBUG: receive_response_body.started request= 2025-12-17 04:39:28 [httpcore.http11] DEBUG: receive_response_body.complete 2025-12-17 04:39:28 [httpcore.http11] DEBUG: response_closed.started 2025-12-17 04:39:28 [httpcore.http11] DEBUG: response_closed.complete 2025-12-17 04:39:28 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers([('date', 'Wed, 17 Dec 2025 04:39:28 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('access-control-expose-headers', 'X-Request-ID'), ('openai-organization', 'user-bmggli0qfnphtzkdehrnfdrn'), ('openai-processing-ms', '1715'), ('openai-project', 'proj_AqBCEfNib7E5LbrMYDz2oklk'), ('openai-version', '2020-10-01'), ('x-envoy-upstream-service-time', '1729'), ('x-ratelimit-limit-requests', '30000'), ('x-ratelimit-limit-tokens', '150000000'), ('x-ratelimit-remaining-requests', '29999'), ('x-ratelimit-remaining-tokens', '149999275'), ('x-ratelimit-reset-requests', '2ms'), ('x-ratelimit-reset-tokens', '0s'), ('x-request-id', 'req_a328cde49e4b4992828bb91bbe9cb807'), ('x-openai-proxy-wasm', 'v0.1'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=RMjjCrcQi_R8E8NcXv7SMkaxGRlUarNGJRtHpAqmy6Y-1765946368-1.0.1.1-Ek6tj..b2cpJj7EcZmooL8.M_l9nxXhKgr91kHUdEdcUtocs5hISFUAhY969gytV.9MSnj8NW4tgQ8CP34n9UNNtz9sVKQjIiCbCfJmG1bQ; path=/; expires=Wed, 17-Dec-25 05:09:28 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('x-content-type-options', 'nosniff'), ('set-cookie', '_cfuvid=igjL9sNHR6qBvkbcclUVPl_JBW3yEbSJFWjDc8bo4TI-1765946368865-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '9af3bc99491edd42-HKG'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) 2025-12-17 04:39:28 [openai._base_client] DEBUG: request_id: req_a328cde49e4b4992828bb91bbe9cb807 2025-12-17 04:39:28 [vnexpress_timestamp] INFO: Min timestamp: 2025-12-17 11:15:00, Published timestamp: 2025-12-17 11:21:15 2025-12-17 04:39:28 [urllib3.connectionpool] DEBUG: Starting new HTTP connection (1): tts-api:4444 2025-12-17 04:42:03 [urllib3.connectionpool] DEBUG: http://tts-api:4444 "POST /api/v2/text-to-speech HTTP/1.1" 200 411 2025-12-17 04:42:03 [scrapy.core.scraper] DEBUG: Scraped from <200 https://vnexpress.net/truong-bi-phat-gan-200-trieu-dong-nhung-khong-co-tien-nop-4994769.html> {'audio_url': 'https://lake-api.actable.ai/tts-data/bhmkassz-2025-12-17%2004%3A39%3A35.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=pmq7GsXVsXQZXqTM0hWE%2F20251217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251217T044159Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=0df518ffe3833bec4065dbf0d96bd9a24277f36d50e0cb1be9342e1ab8d9bffe', 'author': 'Đắc Thành', 'category': 'Thời sự', 'content': 'Ngày 17/12, ông Đỗ Văn Mỹ, hiệu trưởng Trường Phổ thông Dân tộc ' 'bán trú Tiểu học Kim Thủy, xã Kim Ngân, cho hay đã nhận quyết ' 'định xử phạt của Ủy ban nhân dân tỉnh đối với 3 hành vi vi phạm, ' 'tổng mức phạt 196,5 triệu đồng. Tuy nhiên, số tiền này vượt quá ' 'khả năng chi trả nên nhà trường đã có tờ trình gửi Ủy ban nhân ' 'dân xã Kim Ngân đề nghị hỗ trợ kinh phí nộp phạt. Trước đó, ' 'khoảng 16h30 ngày 25/9, bếp ăn của trường chế biến món cá chim ' 'kho cho 75 học sinh ăn bữa tối. Sáng hôm sau, 41 em xuất hiện ' 'triệu chứng ngộ độc thực phẩm và được đưa đi điều trị tại Bệnh ' 'viện Đa khoa khu vực Lệ Thủy. Kết quả xét nghiệm của Viện Pasteur ' 'Nha Trang xác định mẫu cá chim kho nhiễm chủng Bacillus cereus ' 'sinh độc tố NHE và HBL, là nguyên nhân gây ngộ độc thực phẩm. Sở ' 'Y tế xác minh hành vi vi phạm của Trường Phổ thông Dân tộc bán ' 'trú Tiểu học Kim Thủy chưa đến mức truy cứu trách nhiệm hình sự. ' 'Nhà trường bị phạt 170 triệu đồng do vi phạm quy định về an toàn ' 'thực phẩm. Ngoài ra, ông Đỗ Văn Mỹ, với tư cách chủ cơ sở bếp ăn ' 'của trường, bị phạt 15,5 triệu đồng vì không có giấy xác nhận tập ' 'huấn kiến thức an toàn thực phẩm. Tại thời điểm xảy ra vụ việc, ' 'trường sử dụng 2 người nấu ăn không có giấy xác nhận tập huấn ' 'kiến thức về an toàn thực phẩm, bị xử phạt thêm 11 triệu đồng. ' 'Thời hạn khắc phục hậu quả là 10 ngày kể từ ngày nhận quyết định ' 'xử phạt; quá thời hạn, đơn vị vi phạm sẽ bị cưỡng chế thi hành và ' 'phải nộp thêm 0,05% mỗi ngày trên số tiền phạt chưa nộp. Trường ' 'Phổ thông Dân tộc bán trú Tiểu học Kim Thủy hiện có 199 học sinh, ' 'trong đó 75 em học bán trú từ thứ hai đến thứ sáu hằng tuần. Sau ' 'vụ ngộ độc, nhiều phụ huynh cho con nghỉ học nhiều buổi để phản ' 'đối một phó hiệu trưởng; Ủy ban nhân dân xã Kim Ngân đã 2 lần ' 'đình chỉ công tác nữ phó hiệu trưởng, mỗi lần 15 ngày, để xác ' 'minh.', 'description': 'Quảng Trị- Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy ' 'bị xử phạt 196,5 triệu đồng sau khi 41 học sinh bị ngộ độc ' 'thực phẩm, nhưng hiệu trưởng cho biết trường không có tiền ' 'nộp phạt.', 'html_content': '
\n' '

Ngày 17/12, ông Đỗ Văn Mỹ, hiệu trưởng ' 'Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy, xã Kim ' 'Ngân, cho hay đã nhận quyết định xử phạt của Ủy ban nhân dân ' 'tỉnh đối với 3 hành vi vi phạm, tổng mức phạt 196,5 triệu ' 'đồng. Tuy nhiên, số tiền này vượt quá khả năng chi trả nên ' 'nhà trường đã có tờ trình gửi Ủy ban nhân dân xã Kim Ngân đề ' 'nghị hỗ trợ kinh phí nộp phạt.

\n' '
\n' '\n' '\n' '\n' '\n' '
\n' '\n' '\n' '\n' 'Trường Phổ thông '
                 'Dân tộc bán trú Tiểu học Kim Thủy. Ảnh: Đắc Thành\n' '
\n' '
\n' '

Trường Phổ thông Dân tộc bán trú Tiểu học ' 'Kim Thủy. Ảnh: Đắc Thành

\n' '
\n' '

Trước đó, khoảng 16h30 ngày 25/9, ' 'bếp ăn của trường chế biến món cá chim kho cho 75 học sinh ' 'ăn bữa tối. Sáng hôm sau, 41 em xuất hiện triệu chứng ngộ ' 'độc thực phẩm và được đưa đi điều trị tại Bệnh viện Đa khoa ' 'khu vực Lệ Thủy.

Kết quả xét nghiệm của ' 'Viện Pasteur Nha Trang xác định mẫu cá chim kho nhiễm chủng ' 'Bacillus cereus sinh độc tố NHE và HBL, là nguyên nhân gây ' 'ngộ độc thực phẩm.

Sở Y tế xác minh ' 'hành vi vi phạm của Trường Phổ thông Dân tộc bán trú Tiểu ' 'học Kim Thủy chưa đến mức truy cứu trách nhiệm hình sự. Nhà ' 'trường bị phạt 170 triệu đồng do vi phạm quy định về an toàn ' 'thực phẩm. Ngoài ra, ông Đỗ Văn Mỹ, với tư cách chủ cơ sở ' 'bếp ăn của trường, bị phạt 15,5 triệu đồng vì không có giấy ' 'xác nhận tập huấn kiến thức an toàn thực phẩm.

Tại thời điểm xảy ra vụ việc, trường sử dụng ' '2 người nấu ăn không có giấy xác nhận tập huấn kiến thức về ' 'an toàn thực phẩm, bị xử phạt thêm 11 triệu đồng. Thời hạn ' 'khắc phục hậu quả là 10 ngày kể từ ngày nhận quyết định xử ' 'phạt; quá thời hạn, đơn vị vi phạm sẽ bị cưỡng chế thi hành ' 'và phải nộp thêm 0,05% mỗi ngày trên số tiền phạt chưa ' 'nộp.

Trường Phổ thông Dân tộc bán trú ' 'Tiểu học Kim Thủy hiện có 199 học sinh, trong đó 75 em học ' 'bán trú từ thứ hai đến thứ sáu hằng tuần. Sau vụ ngộ độc, ' 'nhiều phụ huynh cho con nghỉ học nhiều buổi để phản đối một ' 'phó hiệu trưởng; Ủy ban nhân dân xã Kim Ngân đã 2 lần đình ' 'chỉ công tác nữ phó hiệu trưởng, mỗi lần 15 ngày, để xác ' 'minh.

Đắc ' 'Thành

\n' '\n' '\n' '\n' '\n' '
', 'md_content': '\n' 'Ngày 17/12, ông Đỗ Văn Mỹ, hiệu trưởng Trường Phổ thông Dân ' 'tộc bán trú Tiểu học Kim Thủy, xã Kim Ngân, cho hay đã nhận ' 'quyết định xử phạt của Ủy ban nhân dân tỉnh đối với 3 hành vi ' 'vi phạm, tổng mức phạt 196,5 triệu đồng. Tuy nhiên, số tiền ' 'này vượt quá khả năng chi trả nên nhà trường đã có tờ trình ' 'gửi Ủy ban nhân dân xã Kim Ngân đề nghị hỗ trợ kinh phí nộp ' 'phạt.\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '![Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy. Ảnh: Đắc ' 'Thành](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)\n' '\n' '\n' 'Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy. Ảnh: *Đắc ' 'Thành*\n' '\n' '\n' '\n' 'Trước đó, khoảng 16h30 ngày 25/9, bếp ăn của trường chế biến ' 'món cá chim kho cho 75 học sinh ăn bữa tối. Sáng hôm sau, 41 ' 'em xuất hiện triệu chứng ngộ độc thực phẩm và được đưa đi điều ' 'trị tại Bệnh viện Đa khoa khu vực Lệ Thủy.\n' '\n' 'Kết quả xét nghiệm của Viện Pasteur Nha Trang xác định mẫu cá ' 'chim kho nhiễm chủng Bacillus cereus sinh độc tố NHE và HBL, ' 'là nguyên nhân gây ngộ độc thực phẩm.\n' '\n' 'Sở Y tế xác minh hành vi vi phạm của Trường Phổ thông Dân tộc ' 'bán trú Tiểu học Kim Thủy chưa đến mức truy cứu trách nhiệm ' 'hình sự. Nhà trường bị phạt 170 triệu đồng do vi phạm quy định ' 'về an toàn thực phẩm. Ngoài ra, ông Đỗ Văn Mỹ, với tư cách chủ ' 'cơ sở bếp ăn của trường, bị phạt 15,5 triệu đồng vì không có ' 'giấy xác nhận tập huấn kiến thức an toàn thực phẩm.\n' '\n' 'Tại thời điểm xảy ra vụ việc, trường sử dụng 2 người nấu ăn ' 'không có giấy xác nhận tập huấn kiến thức về an toàn thực ' 'phẩm, bị xử phạt thêm 11 triệu đồng. Thời hạn khắc phục hậu ' 'quả là 10 ngày kể từ ngày nhận quyết định xử phạt; quá thời ' 'hạn, đơn vị vi phạm sẽ bị cưỡng chế thi hành và phải nộp thêm ' '0,05% mỗi ngày trên số tiền phạt chưa nộp.\n' '\n' 'Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy hiện có 199 ' 'học sinh, trong đó 75 em học bán trú từ thứ hai đến thứ sáu ' 'hằng tuần. Sau vụ ngộ độc, nhiều phụ huynh cho con nghỉ học ' 'nhiều buổi để phản đối một phó hiệu trưởng; Ủy ban nhân dân xã ' 'Kim Ngân đã 2 lần đình chỉ công tác nữ phó hiệu trưởng, mỗi ' 'lần 15 ngày, để xác minh.\n' '\n' '**Đắc Thành**\n' '\n' '\n' '\n' '\n' '\n' '\n', 'published_date': datetime.date(2025, 12, 17), 'published_timestamp': datetime.datetime(2025, 12, 17, 11, 21, 15), 'source': 'VnExpress', 'tags': ['Ngộ độc thực phẩm', 'Trường Phổ thông Dân tộc bán trú Tiểu học Kim Thủy', 'Quyết định xử phạt', 'Ủy ban nhân dân tỉnh', 'Vi phạm an toàn thực phẩm', 'Bacillus cereus', 'Hỗ trợ kinh phí', 'Bếp ăn trường học', 'Điều trị ngộ độc', 'Phạt tiền', 'Giấy xác nhận tập huấn', 'Phụ huynh phản đối', 'Đình chỉ công tác', 'Học sinh bán trú', 'Kim Ngân'], 'title': 'Trường bị phạt gần 200 triệu đồng nhưng không có tiền nộp', 'url': 'https://vnexpress.net/truong-bi-phat-gan-200-trieu-dong-nhung-khong-co-tien-nop-4994769.html', 'voice': 'HN-Nam-1-BL'} 2025-12-17 04:42:03 [scrapy.extensions.logstats] INFO: Crawled 32 pages (at 1 pages/min), scraped 3 items (at 1 items/min) 2025-12-17 04:42:03 [scrapy.core.engine] DEBUG: Crawled (200) (referer: https://vnexpress.net/tin-tuc-24h) 2025-12-17 04:42:03 [httpcore.connection] DEBUG: close.started 2025-12-17 04:42:03 [httpcore.connection] DEBUG: close.complete 2025-12-17 04:42:03 [httpcore.connection] DEBUG: close.started 2025-12-17 04:42:03 [httpcore.connection] DEBUG: close.complete 2025-12-17 04:42:03 [openai._base_client] DEBUG: Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'Act as a content analysis tool. I will provide you with a piece of content, and your task is to extract relevant tags (keywords or phrases) that summarize the main topics, themes, or ideas present in the text. The tags should be concise, specific, and useful for categorization or search purposes. Ignore common filler words (e.g., \'the\', \'and\', \'is\') unless they are part of a specific concept or phrase. After analyzing the content, return the tags in a simple list format. Here is the content to analyze: Cuối tháng 11, video về bà Shi Naiyin (65 tuổi) bất ngờ gây sốt mạng xã hội Trung Quốc. Trong video, người phụ nữ dân tộc Động (Dong) mặc trang phục truyền thống, cười hiền hậu. Bà là nguyên mẫu của cô gái in bên trái tờ tiền mệnh giá một nhân dân tệ, thuộc bộ tiền phát hành lần thứ tư năm 1988. Dù nổi tiếng khắp đất nước với biệt danh "Cô gái một tệ", bà Shi ở ngoài đời chỉ là một nông dân bình dị tại huyện Tòng Giang, tỉnh Quý Châu. Câu chuyện bắt đầu vào một phiên chợ cách đây 49 năm, khi Shi Naiyin mới 16 tuổi. Hôm đó, cô thiếu nữ nổi bật giữa đám đông nhờ mái tóc đen nhánh, bộ trang phục truyền thống và đôi khuyên tai bạc lấp lánh. Khi đang mải chọn mua kim chỉ thêu thùa, Shi bất ngờ bị một người đàn ông lạ mặt kéo nhẹ tay, ra hiệu đứng yên và quay mặt sang một bên để phác họa. Người họa sĩ đó là Hou Yimin, khi ấy đang dành ba năm đi khắp vùng tây nam Trung Quốc để tìm kiếm những gương mặt đại diện cho vẻ đẹp văn hóa các dân tộc thiểu số. Vẽ xong, Shi cũng quên bẵng cuộc gặp gỡ tình cờ này. Năm 1988, khi tờ tiền mới được phát hành in hình hai người phụ nữ (một người dân tộc Động, một người dân tộc Dao), dân làng mới bắt đầu bàn tán vì thấy người trong hình quá giống Shi. Nhưng phải đến năm 2010, các quan chức địa phương mới chính thức xác nhận "cô gái một tệ" chính là Shi Naiyin dựa trên các đặc điểm nhận dạng. Thời trẻ, bà Shi được mệnh danh là "bông hoa của bản". Năm 23 tuổi, bà kết hôn và có hai người con, hiện đều đã đi làm xa. Khi danh tính được xác nhận, sự nổi tiếng bất đắc dĩ mang lại cho bà không ít phiền toái. Nhiều người gửi thư xin tiền vì lầm tưởng bà rất giàu có nhờ xuất hiện trên tiền. Trước những hiểu lầm này, bà Shi khẳng định chưa bao giờ lợi dụng danh tiếng để xin trợ cấp hay trục lợi. "Chúng ta vẫn phải sống cuộc sống như bình thường thôi", bà Shi bình thản nói khi được hỏi về sự nổi tiếng. Hiện tại, dù Trung Quốc đã lưu hành bộ tiền thứ năm, hình ảnh thiếu nữ Shi Naiyin năm 16 tuổi vẫn là một ký ức văn hóa đẹp với nhiều người dân nước này.'}], 'model': 'gpt-4o-mini', 'max_tokens': 200, 'temperature': 0.3}} 2025-12-17 04:42:03 [openai._base_client] DEBUG: Sending HTTP Request: POST https://api.openai.com/v1/chat/completions 2025-12-17 04:42:03 [httpcore.connection] DEBUG: connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=900 socket_options=None 2025-12-17 04:42:03 [httpcore.connection] DEBUG: connect_tcp.complete return_value= 2025-12-17 04:42:03 [httpcore.connection] DEBUG: start_tls.started ssl_context= server_hostname='api.openai.com' timeout=900 2025-12-17 04:42:03 [httpcore.connection] DEBUG: start_tls.complete return_value= 2025-12-17 04:42:03 [httpcore.http11] DEBUG: send_request_headers.started request= 2025-12-17 04:42:03 [httpcore.http11] DEBUG: send_request_headers.complete 2025-12-17 04:42:03 [httpcore.http11] DEBUG: send_request_body.started request= 2025-12-17 04:42:03 [httpcore.http11] DEBUG: send_request_body.complete 2025-12-17 04:42:03 [httpcore.http11] DEBUG: receive_response_headers.started request= 2025-12-17 04:42:06 [httpcore.http11] DEBUG: receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Wed, 17 Dec 2025 04:42:06 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-expose-headers', b'X-Request-ID'), (b'openai-organization', b'user-bmggli0qfnphtzkdehrnfdrn'), (b'openai-processing-ms', b'2239'), (b'openai-project', b'proj_AqBCEfNib7E5LbrMYDz2oklk'), (b'openai-version', b'2020-10-01'), (b'x-envoy-upstream-service-time', b'2254'), (b'x-ratelimit-limit-requests', b'30000'), (b'x-ratelimit-limit-tokens', b'150000000'), (b'x-ratelimit-remaining-requests', b'29999'), (b'x-ratelimit-remaining-tokens', b'149999210'), (b'x-ratelimit-reset-requests', b'2ms'), (b'x-ratelimit-reset-tokens', b'0s'), (b'x-request-id', b'req_65a5bcd0ef08414e84b6f6918322966a'), (b'x-openai-proxy-wasm', b'v0.1'), (b'cf-cache-status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=3kY9BD4jTtkHuwZFY2awuvIF8zYFZDP1yrKvzKRVVXM-1765946526-1.0.1.1-ThD0u4AxNm5I3.e96qBkUaYvAl9W64M8Gq44F.tHN83gDWJuoqz7wtb4.jZC7DYyBdGhHh4fIB_.LSZnApWVxSp7a7WdLt_BAOlONf2EWso; path=/; expires=Wed, 17-Dec-25 05:12:06 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'X-Content-Type-Options', b'nosniff'), (b'Set-Cookie', b'_cfuvid=pZiPoUUPrq3X9vC2WtgojHIQYVyFNG6n1XCWlwX3nro-1765946526069-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'9af3c06c8e420973-HKG'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) 2025-12-17 04:42:06 [httpx] INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" 2025-12-17 04:42:06 [httpcore.http11] DEBUG: receive_response_body.started request= 2025-12-17 04:42:06 [httpcore.http11] DEBUG: receive_response_body.complete 2025-12-17 04:42:06 [httpcore.http11] DEBUG: response_closed.started 2025-12-17 04:42:06 [httpcore.http11] DEBUG: response_closed.complete 2025-12-17 04:42:06 [openai._base_client] DEBUG: HTTP Response: POST https://api.openai.com/v1/chat/completions "200 OK" Headers([('date', 'Wed, 17 Dec 2025 04:42:06 GMT'), ('content-type', 'application/json'), ('transfer-encoding', 'chunked'), ('connection', 'keep-alive'), ('access-control-expose-headers', 'X-Request-ID'), ('openai-organization', 'user-bmggli0qfnphtzkdehrnfdrn'), ('openai-processing-ms', '2239'), ('openai-project', 'proj_AqBCEfNib7E5LbrMYDz2oklk'), ('openai-version', '2020-10-01'), ('x-envoy-upstream-service-time', '2254'), ('x-ratelimit-limit-requests', '30000'), ('x-ratelimit-limit-tokens', '150000000'), ('x-ratelimit-remaining-requests', '29999'), ('x-ratelimit-remaining-tokens', '149999210'), ('x-ratelimit-reset-requests', '2ms'), ('x-ratelimit-reset-tokens', '0s'), ('x-request-id', 'req_65a5bcd0ef08414e84b6f6918322966a'), ('x-openai-proxy-wasm', 'v0.1'), ('cf-cache-status', 'DYNAMIC'), ('set-cookie', '__cf_bm=3kY9BD4jTtkHuwZFY2awuvIF8zYFZDP1yrKvzKRVVXM-1765946526-1.0.1.1-ThD0u4AxNm5I3.e96qBkUaYvAl9W64M8Gq44F.tHN83gDWJuoqz7wtb4.jZC7DYyBdGhHh4fIB_.LSZnApWVxSp7a7WdLt_BAOlONf2EWso; path=/; expires=Wed, 17-Dec-25 05:12:06 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'), ('x-content-type-options', 'nosniff'), ('set-cookie', '_cfuvid=pZiPoUUPrq3X9vC2WtgojHIQYVyFNG6n1XCWlwX3nro-1765946526069-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), ('server', 'cloudflare'), ('cf-ray', '9af3c06c8e420973-HKG'), ('content-encoding', 'gzip'), ('alt-svc', 'h3=":443"; ma=86400')]) 2025-12-17 04:42:06 [openai._base_client] DEBUG: request_id: req_65a5bcd0ef08414e84b6f6918322966a 2025-12-17 04:42:06 [vnexpress_timestamp] INFO: Min timestamp: 2025-12-17 11:15:00, Published timestamp: 2025-12-17 11:25:09 2025-12-17 04:42:06 [urllib3.connectionpool] DEBUG: Starting new HTTP connection (1): tts-api:4444 2025-12-17 04:45:46 [urllib3.connectionpool] DEBUG: http://tts-api:4444 "POST /api/v2/text-to-speech HTTP/1.1" 200 411 2025-12-17 04:45:46 [scrapy.core.scraper] DEBUG: Scraped from <200 https://vnexpress.net/cuoc-song-cua-co-gai-1-te-sau-50-nam-4994832.html> {'audio_url': 'https://lake-api.actable.ai/tts-data/kxatbfqi-2025-12-17%2004%3A42%3A06.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=pmq7GsXVsXQZXqTM0hWE%2F20251217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20251217T044543Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=b2a0ed16f3e27454c623ead5acdc1686b755aa6953da344536d6c47e1c993dd1', 'author': 'Nhật Minh', 'category': 'Đời sống', 'content': 'Cuối tháng 11, video về bà Shi Naiyin (65 tuổi) bất ngờ gây sốt ' 'mạng xã hội Trung Quốc. Trong video, người phụ nữ dân tộc Động ' '(Dong) mặc trang phục truyền thống, cười hiền hậu. Bà là nguyên ' 'mẫu của cô gái in bên trái tờ tiền mệnh giá một nhân dân tệ, ' 'thuộc bộ tiền phát hành lần thứ tư năm 1988. Dù nổi tiếng khắp ' 'đất nước với biệt danh "Cô gái một tệ", bà Shi ở ngoài đời chỉ là ' 'một nông dân bình dị tại huyện Tòng Giang, tỉnh Quý Châu. Câu ' 'chuyện bắt đầu vào một phiên chợ cách đây 49 năm, khi Shi Naiyin ' 'mới 16 tuổi. Hôm đó, cô thiếu nữ nổi bật giữa đám đông nhờ mái ' 'tóc đen nhánh, bộ trang phục truyền thống và đôi khuyên tai bạc ' 'lấp lánh. Khi đang mải chọn mua kim chỉ thêu thùa, Shi bất ngờ bị ' 'một người đàn ông lạ mặt kéo nhẹ tay, ra hiệu đứng yên và quay ' 'mặt sang một bên để phác họa. Người họa sĩ đó là Hou Yimin, khi ' 'ấy đang dành ba năm đi khắp vùng tây nam Trung Quốc để tìm kiếm ' 'những gương mặt đại diện cho vẻ đẹp văn hóa các dân tộc thiểu số. ' 'Vẽ xong, Shi cũng quên bẵng cuộc gặp gỡ tình cờ này. Năm 1988, ' 'khi tờ tiền mới được phát hành in hình hai người phụ nữ (một ' 'người dân tộc Động, một người dân tộc Dao), dân làng mới bắt đầu ' 'bàn tán vì thấy người trong hình quá giống Shi. Nhưng phải đến ' 'năm 2010, các quan chức địa phương mới chính thức xác nhận "cô ' 'gái một tệ" chính là Shi Naiyin dựa trên các đặc điểm nhận dạng. ' 'Thời trẻ, bà Shi được mệnh danh là "bông hoa của bản". Năm 23 ' 'tuổi, bà kết hôn và có hai người con, hiện đều đã đi làm xa. Khi ' 'danh tính được xác nhận, sự nổi tiếng bất đắc dĩ mang lại cho bà ' 'không ít phiền toái. Nhiều người gửi thư xin tiền vì lầm tưởng bà ' 'rất giàu có nhờ xuất hiện trên tiền. Trước những hiểu lầm này, bà ' 'Shi khẳng định chưa bao giờ lợi dụng danh tiếng để xin trợ cấp ' 'hay trục lợi. "Chúng ta vẫn phải sống cuộc sống như bình thường ' 'thôi", bà Shi bình thản nói khi được hỏi về sự nổi tiếng. Hiện ' 'tại, dù Trung Quốc đã lưu hành bộ tiền thứ năm, hình ảnh thiếu nữ ' 'Shi Naiyin năm 16 tuổi vẫn là một ký ức văn hóa đẹp với nhiều ' 'người dân nước này.', 'description': 'Gần 50 năm sau khi hình ảnh xuất hiện trên tờ tiền một tệ, bà ' 'Shi Naiyin vẫn làm nông dân ở vùng núi Quý Châu và từ chối ' 'mọi sự giúp đỡ từ danh tiếng bất đắc dĩ.', 'html_content': '
\n' '

Cuối tháng 11, video về bà Shi Naiyin (65 ' 'tuổi) bất ngờ gây sốt mạng xã hội Trung Quốc. Trong video, ' 'người phụ nữ dân tộc Động (Dong) mặc trang phục truyền ' 'thống, cười hiền hậu. Bà là nguyên mẫu của cô gái in bên ' 'trái tờ tiền mệnh giá một nhân dân tệ, thuộc bộ tiền phát ' 'hành lần thứ tư năm 1988.

Dù nổi tiếng ' 'khắp đất nước với biệt danh "Cô gái một tệ", bà Shi ở ngoài ' 'đời chỉ là một nông dân bình dị tại huyện Tòng Giang, tỉnh ' 'Quý Châu.

\n' '
\n' '\n' '\n' '\n' '\n' '
\n' '\n' '\n' '\n' 'Shi hiện tại và '
                 'hình ảnh năm 16 tuổi in trên tờ tiền Trung Quốc. Ảnh: SCMP\n' '
\n' '
\n' '

Shi hiện tại và hình ảnh năm 16 tuổi in ' 'trên tờ tiền Trung Quốc. Ảnh: SCMP

\n' '
\n' '

Câu chuyện bắt đầu vào một phiên ' 'chợ cách đây 49 năm, khi Shi Naiyin mới 16 tuổi. Hôm đó, cô ' 'thiếu nữ nổi bật giữa đám đông nhờ mái tóc đen nhánh, bộ ' 'trang phục truyền thống và đôi khuyên tai bạc lấp ' 'lánh.

Khi đang mải chọn mua kim chỉ ' 'thêu thùa, Shi bất ngờ bị một người đàn ông lạ mặt kéo nhẹ ' 'tay, ra hiệu đứng yên và quay mặt sang một bên để phác họa. ' 'Người họa sĩ đó là Hou Yimin, khi ấy đang dành ba năm đi ' 'khắp vùng tây nam Trung Quốc để tìm kiếm những gương mặt đại ' 'diện cho vẻ đẹp văn hóa các dân tộc thiểu số. Vẽ xong, Shi ' 'cũng quên bẵng cuộc gặp gỡ tình cờ này.

Năm 1988, khi tờ tiền mới được phát hành in ' 'hình hai người phụ nữ (một người dân tộc Động, một người dân ' 'tộc Dao), dân làng mới bắt đầu bàn tán vì thấy người trong ' 'hình quá giống Shi. Nhưng phải đến năm 2010, các quan chức ' 'địa phương mới chính thức xác nhận "cô gái một tệ" chính là ' 'Shi Naiyin dựa trên các đặc điểm nhận dạng.

Thời trẻ, bà Shi được mệnh danh là "bông hoa ' 'của bản". Năm 23 tuổi, bà kết hôn và có hai người con, hiện ' 'đều đã đi làm xa.

Khi danh tính được ' 'xác nhận, sự nổi tiếng bất đắc dĩ mang lại cho bà không ít ' 'phiền toái. Nhiều người gửi thư xin tiền vì lầm tưởng bà rất ' 'giàu có nhờ xuất hiện trên tiền. Trước những hiểu lầm này, ' 'bà Shi khẳng định chưa bao giờ lợi dụng danh tiếng để xin ' 'trợ cấp hay trục lợi.

"Chúng ta vẫn ' 'phải sống cuộc sống như bình thường thôi", bà Shi bình thản ' 'nói khi được hỏi về sự nổi tiếng.

Hiện ' 'tại, dù Trung Quốc đã lưu hành bộ tiền thứ năm, hình ảnh ' 'thiếu nữ Shi Naiyin năm 16 tuổi vẫn là một ký ức văn hóa đẹp ' 'với nhiều người dân nước này.

Nhật Minh ' '(Theo SCMP/Sina)

\n' '\n' '\n' '\n' '\n' '
', 'md_content': '\n' 'Cuối tháng 11, video về bà Shi Naiyin (65 tuổi) bất ngờ gây ' 'sốt mạng xã hội Trung Quốc. Trong video, người phụ nữ dân tộc ' 'Động (Dong) mặc trang phục truyền thống, cười hiền hậu. Bà là ' 'nguyên mẫu của cô gái in bên trái tờ tiền mệnh giá một nhân ' 'dân tệ, thuộc bộ tiền phát hành lần thứ tư năm 1988.\n' '\n' 'Dù nổi tiếng khắp đất nước với biệt danh "Cô gái một tệ", bà ' 'Shi ở ngoài đời chỉ là một nông dân bình dị tại huyện Tòng ' 'Giang, tỉnh Quý Châu.\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '\n' '![Shi hiện tại và hình ảnh năm 16 tuổi in trên tờ tiền Trung ' 'Quốc. Ảnh: ' 'SCMP](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)\n' '\n' '\n' 'Shi hiện tại và hình ảnh năm 16 tuổi in trên tờ tiền Trung ' 'Quốc. Ảnh: *SCMP*\n' '\n' '\n' '\n' 'Câu chuyện bắt đầu vào một phiên chợ cách đây 49 năm, khi Shi ' 'Naiyin mới 16 tuổi. Hôm đó, cô thiếu nữ nổi bật giữa đám đông ' 'nhờ mái tóc đen nhánh, bộ trang phục truyền thống và đôi ' 'khuyên tai bạc lấp lánh.\n' '\n' 'Khi đang mải chọn mua kim chỉ thêu thùa, Shi bất ngờ bị một ' 'người đàn ông lạ mặt kéo nhẹ tay, ra hiệu đứng yên và quay mặt ' 'sang một bên để phác họa. Người họa sĩ đó là Hou Yimin, khi ấy ' 'đang dành ba năm đi khắp vùng tây nam Trung Quốc để tìm kiếm ' 'những gương mặt đại diện cho vẻ đẹp văn hóa các dân tộc thiểu ' 'số. Vẽ xong, Shi cũng quên bẵng cuộc gặp gỡ tình cờ này.\n' '\n' 'Năm 1988, khi tờ tiền mới được phát hành in hình hai người phụ ' 'nữ (một người dân tộc Động, một người dân tộc Dao), dân làng ' 'mới bắt đầu bàn tán vì thấy người trong hình quá giống Shi. ' 'Nhưng phải đến năm 2010, các quan chức địa phương mới chính ' 'thức xác nhận "cô gái một tệ" chính là Shi Naiyin dựa trên các ' 'đặc điểm nhận dạng.\n' '\n' 'Thời trẻ, bà Shi được mệnh danh là "bông hoa của bản". Năm 23 ' 'tuổi, bà kết hôn và có hai người con, hiện đều đã đi làm xa.\n' '\n' 'Khi danh tính được xác nhận, sự nổi tiếng bất đắc dĩ mang lại ' 'cho bà không ít phiền toái. Nhiều người gửi thư xin tiền vì ' 'lầm tưởng bà rất giàu có nhờ xuất hiện trên tiền. Trước những ' 'hiểu lầm này, bà Shi khẳng định chưa bao giờ lợi dụng danh ' 'tiếng để xin trợ cấp hay trục lợi.\n' '\n' '"Chúng ta vẫn phải sống cuộc sống như bình thường thôi", bà ' 'Shi bình thản nói khi được hỏi về sự nổi tiếng.\n' '\n' 'Hiện tại, dù Trung Quốc đã lưu hành bộ tiền thứ năm, hình ảnh ' 'thiếu nữ Shi Naiyin năm 16 tuổi vẫn là một ký ức văn hóa đẹp ' 'với nhiều người dân nước này.\n' '\n' '**Nhật Minh** (Theo *SCMP/Sina*)\n' '\n' '\n' '\n' '\n' '\n' '\n', 'published_date': datetime.date(2025, 12, 17), 'published_timestamp': datetime.datetime(2025, 12, 17, 11, 25, 9), 'source': 'VnExpress', 'tags': ['Shi Naiyin', 'Cô gái một tệ', 'Video viral', 'Dân tộc Động', 'Trang phục truyền thống', 'Huyện Tòng Giang', 'Tỉnh Quý Châu', 'Cuộc gặp gỡ tình cờ', 'Hou Yimin', 'Vẻ đẹp văn hóa', 'Tiền nhân dân tệ', 'Danh tính xác nhận', 'Phiền toái từ nổi tiếng', 'Cuộc sống bình thường', 'Ký ức văn hóa'], 'title': "Cuộc sống của 'cô gái 1 tệ' sau 50 năm", 'url': 'https://vnexpress.net/cuoc-song-cua-co-gai-1-te-sau-50-nam-4994832.html', 'voice': 'SG-Nam-1-TM'} 2025-12-17 04:45:46 [scrapy.extensions.logstats] INFO: Crawled 33 pages (at 1 pages/min), scraped 4 items (at 1 items/min) 2025-12-17 04:45:46 [scrapy.core.engine] INFO: Closing spider (finished) 2025-12-17 04:45:46 [boto3.s3.transfer] DEBUG: Opting out of CRT Transfer Manager. Preferred client: auto, CRT available: False, Instance Optimized: False. 2025-12-17 04:45:46 [boto3.s3.transfer] DEBUG: Using default client. pid: 189219, thread: 140618967411512 2025-12-17 04:45:46 [s3transfer.utils] DEBUG: Acquiring 0 2025-12-17 04:45:46 [s3transfer.tasks] DEBUG: UploadSubmissionTask(transfer_id=0, {'transfer_future': }) about to wait for the following futures [] 2025-12-17 04:45:46 [s3transfer.tasks] DEBUG: UploadSubmissionTask(transfer_id=0, {'transfer_future': }) done waiting for dependent futures 2025-12-17 04:45:46 [s3transfer.tasks] DEBUG: Executing task UploadSubmissionTask(transfer_id=0, {'transfer_future': }) with kwargs {'client': , 'config': , 'osutil': , 'request_executor': , 'transfer_future': } 2025-12-17 04:45:46 [s3transfer.futures] DEBUG: Submitting task PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}}) to executor for transfer request: 0. 2025-12-17 04:45:46 [s3transfer.utils] DEBUG: Acquiring 0 2025-12-17 04:45:46 [s3transfer.tasks] DEBUG: PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}}) about to wait for the following futures [] 2025-12-17 04:45:46 [s3transfer.utils] DEBUG: Releasing acquire 0/None 2025-12-17 04:45:46 [s3transfer.tasks] DEBUG: PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}}) done waiting for dependent futures 2025-12-17 04:45:46 [s3transfer.tasks] DEBUG: Executing task PutObjectTask(transfer_id=0, {'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}}) with kwargs {'client': , 'fileobj': , 'bucket': 'dagster-output-data', 'key': 'vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'extra_args': {}} 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler > 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler > 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-parameter-build.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-endpoint-resolution.s3: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-endpoint-resolution.s3: calling handler > 2025-12-17 04:45:46 [botocore.regions] DEBUG: Calling endpoint provider with parameters: {'Bucket': 'dagster-output-data', 'Region': 'us-east-1', 'UseFIPS': False, 'UseDualStack': False, 'Endpoint': 'https://lake-api.actable.ai/', 'ForcePathStyle': True, 'Accelerate': False, 'UseGlobalEndpoint': True, 'Key': 'vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'DisableMultiRegionAccessPoints': False, 'UseArnRegion': True} 2025-12-17 04:45:46 [botocore.regions] DEBUG: Endpoint provider result: https://lake-api.actable.ai/dagster-output-data 2025-12-17 04:45:46 [botocore.regions] DEBUG: Selecting from endpoint provider's list of auth schemes: "sigv4". User selected auth scheme is: "None" 2025-12-17 04:45:46 [botocore.regions] DEBUG: Selected auth type "v4" as "v4" with signing context params: {'region': 'us-east-1', 'signing_name': 's3', 'disableDoubleEncoding': True} 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.handlers] DEBUG: Adding expect 100 continue header to request. 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler > 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-call.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.endpoint] DEBUG: Making request for OperationModel(name=PutObject) with params: {'url_path': '/vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'query_string': {}, 'method': 'PUT', 'headers': {'User-Agent': 'Boto3/1.34.57 md/Botocore#1.34.162 ua/2.0 os/linux#5.15.0-157-generic md/arch#x86_64 lang/python#3.11.13 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.34.162', 'Content-MD5': 'yJ3i8/IseV0ArRpaO7eXlA==', 'Expect': '100-continue'}, 'body': , 'auth_path': '/dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'url': 'https://lake-api.actable.ai/dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'context': {'client_region': 'us-east-1', 'client_config': , 'has_streaming_input': True, 'auth_type': 'v4', 's3_redirect': {'redirected': False, 'bucket': 'dagster-output-data', 'params': {'Bucket': 'dagster-output-data', 'Key': 'vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl', 'Body': }}, 'input_params': {'Bucket': 'dagster-output-data', 'Key': 'vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl'}, 'signing': {'region': 'us-east-1', 'signing_name': 's3', 'disableDoubleEncoding': True}, 'endpoint_properties': {'authSchemes': [{'disableDoubleEncoding': True, 'name': 'sigv4', 'signingName': 's3', 'signingRegion': 'us-east-1'}]}}} 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler > 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event choose-signer.s3.PutObject: calling handler > 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event choose-signer.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-sign.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event before-sign.s3.PutObject: calling handler > 2025-12-17 04:45:46 [botocore.auth] DEBUG: Calculating signature using v4 auth. 2025-12-17 04:45:46 [botocore.auth] DEBUG: CanonicalRequest: PUT /dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl content-md5:yJ3i8/IseV0ArRpaO7eXlA== host:lake-api.actable.ai x-amz-content-sha256:UNSIGNED-PAYLOAD x-amz-date:20251217T044546Z content-md5;host;x-amz-content-sha256;x-amz-date UNSIGNED-PAYLOAD 2025-12-17 04:45:46 [botocore.auth] DEBUG: StringToSign: AWS4-HMAC-SHA256 20251217T044546Z 20251217/us-east-1/s3/aws4_request 3fce20f36272ed84ed1552cf2b68b3e7348efdc2c9a0070801b62984088c8d48 2025-12-17 04:45:46 [botocore.auth] DEBUG: Signature: a0ab00a4928acd44a938ca8c4e6999cae843478f33aa7c3abc61c52a5aea4f51 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event request-created.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.endpoint] DEBUG: Sending http request: 2025-12-17 04:45:46 [botocore.httpsession] DEBUG: Certificate path: /usr/local/lib/python3.11/site-packages/certifi/cacert.pem 2025-12-17 04:45:46 [urllib3.connectionpool] DEBUG: Starting new HTTPS connection (1): lake-api.actable.ai:443 2025-12-17 04:45:46 [botocore.awsrequest] DEBUG: Waiting for 100 Continue response. 2025-12-17 04:45:46 [botocore.awsrequest] DEBUG: 100 Continue response seen, now sending request body. 2025-12-17 04:45:46 [urllib3.connectionpool] DEBUG: https://lake-api.actable.ai:443 "PUT /dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl HTTP/1.1" 200 0 2025-12-17 04:45:46 [botocore.parsers] DEBUG: Response headers: {'Server': 'nginx/1.24.0 (Ubuntu)', 'Date': 'Wed, 17 Dec 2025 04:45:46 GMT', 'Content-Length': '0', 'Connection': 'keep-alive', 'Accept-Ranges': 'bytes', 'ETag': '"c89de2f3f22c795d00ad1a5a3bb79794"', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains', 'Vary': 'Origin, Accept-Encoding', 'X-Amz-Bucket-Region': 'us-east-1', 'X-Amz-Id-2': 'dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8', 'X-Amz-Request-Id': '1881E735A3667E96', 'X-Content-Type-Options': 'nosniff', 'X-Ratelimit-Limit': '25637', 'X-Ratelimit-Remaining': '25637', 'X-Xss-Protection': '1; mode=block'} 2025-12-17 04:45:46 [botocore.parsers] DEBUG: Response body: b'' 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event needs-retry.s3.PutObject: calling handler 2025-12-17 04:45:46 [botocore.retryhandler] DEBUG: No retry needed. 2025-12-17 04:45:46 [botocore.hooks] DEBUG: Event needs-retry.s3.PutObject: calling handler > 2025-12-17 04:45:46 [s3transfer.utils] DEBUG: Releasing acquire 0/None 2025-12-17 04:45:46 [scrapy.extensions.feedexport] INFO: Stored jsonlines feed (4 items) in: s3://dagster-output-data/vnexpress_timestamp/vnexpress_timestamp_2d6f28f8db0111f099e2d6783c969646_scheduled_2025-12-17.jl 2025-12-17 04:45:46 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/request_bytes': 11107, 'downloader/request_count': 33, 'downloader/request_method_count/GET': 33, 'downloader/response_bytes': 1758073, 'downloader/response_count': 33, 'downloader/response_status_count/200': 33, 'elapsed_time_seconds': 875.422503, 'feedexport/success_count/S3FeedStorage': 1, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2025, 12, 17, 4, 45, 46, 403172, tzinfo=datetime.timezone.utc), 'httpcompression/response_bytes': 8160647, 'httpcompression/response_count': 33, 'item_scraped_count': 4, 'log_count/DEBUG': 233, 'log_count/ERROR': 2, 'log_count/INFO': 49, 'memusage/max': 151965696, 'memusage/startup': 124940288, 'request_depth_max': 2, 'response_received_count': 33, 'robotstxt/request_count': 1, 'robotstxt/response_count': 1, 'robotstxt/response_status_count/200': 1, 'scheduler/dequeued': 32, 'scheduler/dequeued/memory': 32, 'scheduler/enqueued': 32, 'scheduler/enqueued/memory': 32, 'spider_exceptions/ParserError': 2, 'start_time': datetime.datetime(2025, 12, 17, 4, 31, 10, 980669, tzinfo=datetime.timezone.utc)} 2025-12-17 04:45:46 [scrapy.core.engine] INFO: Spider closed (finished) 2025-12-17 04:45:46 [httpcore.connection] DEBUG: close.started 2025-12-17 04:45:46 [httpcore.connection] DEBUG: close.complete