一键导入
verify
Build, launch, and drive Newspipe locally to verify a change end-to-end against the real HTTP surface.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Build, launch, and drive Newspipe locally to verify a change end-to-end against the real HTTP surface.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | verify |
| description | Build, launch, and drive Newspipe locally to verify a change end-to-end against the real HTTP surface. |
export NEWSPIPE_CONFIG=sqlite.py # uses instance/newspipe.db
poetry run flask db upgrade # apply pending migrations
poetry run flask run --debug --port 5599
Gotcha: without --debug, Flask-Talisman 302-redirects every HTTP request
to HTTPS — curl/requests against http://127.0.0.1 only work in debug mode.
Create a throwaway user + feed + articles with the controllers (app context),
then drive over HTTP. Delete afterwards with flask delete_user --user-id <id>.
from werkzeug.security import generate_password_hash
from newspipe.bootstrap import application
from newspipe.controllers import ArticleController, FeedController, UserController
with application.app_context():
user = UserController(ignore_context=True).create(
nickname="verifybot",
pwdhash=generate_password_hash("verifypass123"),
is_active=True,
is_admin=False,
is_api=False,
)
feed = FeedController(user.id).create(
title="Verify Feed",
link="http://example.com/feed",
site_link="http://example.com",
)
ArticleController(user.id).create(
entry_id="verify-0",
title="Verify article",
content="Content",
link="http://example.com/0",
feed_id=feed.id,
)
Keep is_api=False: non-admin users with is_api=True hit a pre-existing
500 on PUT /api/v2.0/article/<id> (_get_attrs_desc chokes on the tags
association proxy in fields_api_write).
/login, scrape name="csrf_token" ... value="..." from the
form, POST nickname/password with it (requests.Session keeps the cookie).<meta name="csrf-token"> tag in the
layout; send it as an X-CSRFToken header./ (home, ?filter_=all|read|unread, ?liked=1,
?read_later=1), /home/articles (infinite-scroll JSON),
/article/<id>, /api/v2.0/article/<id> (basic auth works in debug).id="total-unread" in the home HTML.Snooze/read/like toggles, mark_all_as_read, search (?query=...&search_title=on &search_content=on), migration up/down/up (flask db downgrade / upgrade).