Add Flickr search term override field

Allow users to edit the Flickr search query without changing the
Wikipedia article. Shows a text field with the current search term
(including quotes for phrase search) that can be modified and
re-submitted. The search term persists across pagination and photo
selection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Edward Betts 2026-02-08 13:42:18 +00:00
parent 57b2e474df
commit 7b741e951f
2 changed files with 32 additions and 12 deletions

12
main.py
View file

@ -491,7 +491,7 @@ def is_valid_flickr_image_url(url: str) -> bool:
def search_flickr(search_term: str, page: int = 1) -> SearchResult:
"""Search Flickr for photos matching the search term."""
encoded_term = quote(f'"{search_term}"')
encoded_term = quote(search_term)
url = f"https://flickr.com/search/?view_all=1&text={encoded_term}&page={page}"
response = requests.get(url, headers=BROWSER_HEADERS)
@ -711,20 +711,24 @@ def start() -> str:
# Get category param if coming from category search
cat = flask.request.args.get("cat")
# Allow overriding the Flickr search term (default includes quotes for phrase search)
flickr_search = flask.request.args.get("flickr_search") or f'"{name}"'
flickr_url = flask.request.args.get("flickr")
if not flickr_url:
# Search Flickr for photos
page = flask.request.args.get("page", 1, type=int)
page = max(1, page) # Ensure page is at least 1
if page == 1:
log_interaction("search_article", query=name, wikipedia_url=wikipedia_url)
search_result = search_flickr(name, page)
log_interaction("search_article", query=flickr_search, wikipedia_url=wikipedia_url)
search_result = search_flickr(flickr_search, page)
return flask.render_template(
"combined.html",
name=name,
enwp=enwp,
search_result=search_result,
cat=cat,
flickr_search=flickr_search,
)
if "/in/" in flickr_url:
@ -778,6 +782,7 @@ def start() -> str:
flickr_user_url=flickr_user_url,
cat=cat,
previous_messages=previous_messages,
flickr_search=flickr_search,
)
log_interaction(
@ -818,6 +823,7 @@ def start() -> str:
flickr_user_url=flickr_user_url,
cat=cat,
previous_messages=previous_messages,
flickr_search=flickr_search,
)

View file

@ -63,13 +63,20 @@
<p><a href="{{ url_for('category_search', cat=cat) }}">&larr; Back to category</a></p>
{% endif %}
<p>Wikipedia article: {{ name }}</p>
<form action="{{ url_for(request.endpoint) }}" class="mb-3 d-flex align-items-center gap-2">
<input type="hidden" name="enwp" value="{{ enwp }}">
{% if cat %}<input type="hidden" name="cat" value="{{ cat }}">{% endif %}
<label for="flickr_search" class="form-label mb-0 text-nowrap">Flickr search:</label>
<input type="text" class="form-control form-control-sm" id="flickr_search" name="flickr_search" value="{{ flickr_search }}" style="max-width: 300px;">
<button type="submit" class="btn btn-sm btn-primary">Search</button>
</form>
<p>Select a photo to compose a message ({{ search_result.total_photos | default(0) }} results):</p>
<div class="row row-cols-2 row-cols-md-3 row-cols-lg-4 g-3 mb-3">
{% for photo in search_result.photos %}
<div class="col">
<div class="card h-100">
<a href="{{ url_for(request.endpoint, enwp=enwp, flickr=photo.flickr_url, img=photo.medium_url, license=photo.license, flickr_user=photo.realname or photo.username, cat=cat) }}">
<a href="{{ url_for(request.endpoint, enwp=enwp, flickr=photo.flickr_url, img=photo.medium_url, license=photo.license, flickr_user=photo.realname or photo.username, cat=cat, flickr_search=flickr_search) }}">
<img src="{{ photo.thumb_url }}" alt="{{ photo.title }}" class="card-img-top" style="aspect-ratio: 1; object-fit: cover;">
</a>
<div class="card-body p-2">
@ -86,7 +93,7 @@
<ul class="pagination justify-content-center">
{% if search_result.current_page > 1 %}
<li class="page-item">
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, page=search_result.current_page - 1, cat=cat) }}">Previous</a>
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, flickr_search=flickr_search, page=search_result.current_page - 1, cat=cat) }}">Previous</a>
</li>
{% else %}
<li class="page-item disabled">
@ -99,7 +106,7 @@
{% if start_page > 1 %}
<li class="page-item">
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, page=1, cat=cat) }}">1</a>
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, flickr_search=flickr_search, page=1, cat=cat) }}">1</a>
</li>
{% if start_page > 2 %}
<li class="page-item disabled"><span class="page-link">...</span></li>
@ -108,7 +115,7 @@
{% for p in range(start_page, end_page + 1) %}
<li class="page-item {{ 'active' if p == search_result.current_page else '' }}">
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, page=p, cat=cat) }}">{{ p }}</a>
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, flickr_search=flickr_search, page=p, cat=cat) }}">{{ p }}</a>
</li>
{% endfor %}
@ -117,13 +124,13 @@
<li class="page-item disabled"><span class="page-link">...</span></li>
{% endif %}
<li class="page-item">
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, page=search_result.total_pages, cat=cat) }}">{{ search_result.total_pages }}</a>
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, flickr_search=flickr_search, page=search_result.total_pages, cat=cat) }}">{{ search_result.total_pages }}</a>
</li>
{% endif %}
{% if search_result.current_page < search_result.total_pages %}
<li class="page-item">
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, page=search_result.current_page + 1, cat=cat) }}">Next</a>
<a class="page-link" href="{{ url_for(request.endpoint, enwp=enwp, flickr_search=flickr_search, page=search_result.current_page + 1, cat=cat) }}">Next</a>
</li>
{% else %}
<li class="page-item disabled">
@ -135,7 +142,7 @@
{% endif %}
<p class="text-muted small">
<a href="https://flickr.com/search/?view_all=1&text={{ '"' + name + '"' | urlencode }}" target="_blank">View full search on Flickr</a>
<a href="https://flickr.com/search/?view_all=1&text={{ flickr_search | urlencode }}" target="_blank">View full search on Flickr</a>
</p>
{% elif name and not flickr_url %}
@ -144,8 +151,15 @@
<p><a href="{{ url_for('category_search', cat=cat) }}">&larr; Back to category</a></p>
{% endif %}
<p>Wikipedia article: {{ name }}</p>
<form action="{{ url_for(request.endpoint) }}" class="mb-3 d-flex align-items-center gap-2">
<input type="hidden" name="enwp" value="{{ enwp }}">
{% if cat %}<input type="hidden" name="cat" value="{{ cat }}">{% endif %}
<label for="flickr_search_empty" class="form-label mb-0 text-nowrap">Flickr search:</label>
<input type="text" class="form-control form-control-sm" id="flickr_search_empty" name="flickr_search" value="{{ flickr_search }}" style="max-width: 300px;">
<button type="submit" class="btn btn-sm btn-primary">Search</button>
</form>
<div class="alert alert-warning">No photos found. Try a different search term.</div>
<p><a href="https://flickr.com/search/?view_all=1&text={{ '"' + name + '"' | urlencode }}" target="_blank">Search on Flickr directly</a></p>
<p><a href="https://flickr.com/search/?view_all=1&text={{ flickr_search | urlencode }}" target="_blank">Search on Flickr directly</a></p>
{% endif %}
@ -201,7 +215,7 @@
</div>
{% endif %}
<p class="mt-3">
<a href="{{ url_for('start', enwp=enwp, cat=cat) if cat else url_for('start', enwp=enwp) }}">&larr; Back to search results</a>
<a href="{{ url_for('start', enwp=enwp, cat=cat, flickr_search=flickr_search) }}">&larr; Back to search results</a>
</p>
</div>
</div>