Complete refactoring of opensearch
Refactored opensearch.xml to only exist as a template that is served by a flask route, which is then populated with the necessary url root.main
parent
02bb5a3426
commit
1f6bfa092e
|
@ -20,7 +20,7 @@ Get Google search results, but without any ads, javascript, AMP links, or tracki
|
||||||
- [A Heroku Account](https://www.heroku.com/)
|
- [A Heroku Account](https://www.heroku.com/)
|
||||||
- Optional, but recommended. Allows for free hosting of the web app and single-click deployment.
|
- Optional, but recommended. Allows for free hosting of the web app and single-click deployment.
|
||||||
- Alternatively, you can host the app using a different service, or deploy it to your own server (explained below).
|
- Alternatively, you can host the app using a different service, or deploy it to your own server (explained below).
|
||||||
|
|
||||||
If deploying manually:
|
If deploying manually:
|
||||||
- Docker ([Windows](https://docs.docker.com/docker-for-windows/install/), [macOS](https://docs.docker.com/docker-for-mac/install/), [Ubuntu](https://docs.docker.com/engine/install/ubuntu/), [other Linux distros](https://docs.docker.com/engine/install/binaries/))
|
- Docker ([Windows](https://docs.docker.com/docker-for-windows/install/), [macOS](https://docs.docker.com/docker-for-mac/install/), [Ubuntu](https://docs.docker.com/engine/install/ubuntu/), [other Linux distros](https://docs.docker.com/engine/install/binaries/))
|
||||||
- [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli)
|
- [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli)
|
||||||
|
@ -77,10 +77,7 @@ To filter by a range of time, append ":past <time>" to the end of your search, w
|
||||||
|
|
||||||
## Extra Steps
|
## Extra Steps
|
||||||
### Set Shoogle as your primary search engine
|
### Set Shoogle as your primary search engine
|
||||||
1. From the main shoogle folder, run `python config/opensearch.py "<your app url>"`
|
Update browser settings:
|
||||||
2. Rebuild and release your updated app
|
|
||||||
- `heroku container:push web` and then `heroku container:release web`
|
|
||||||
3. Update browser settings
|
|
||||||
- Firefox (Desktop)
|
- Firefox (Desktop)
|
||||||
- Navigate to your app's url, and click the 3 dot menu in the address bar. At the bottom, there should be an option to "Add Search Engine". Once you've clicked this, open your Firefox Preferences menu, click "Search" in the left menu, and use the available dropdown to select "Shoogle" from the list.
|
- Navigate to your app's url, and click the 3 dot menu in the address bar. At the bottom, there should be an option to "Add Search Engine". Once you've clicked this, open your Firefox Preferences menu, click "Search" in the left menu, and use the available dropdown to select "Shoogle" from the list.
|
||||||
- Firefox (Mobile)
|
- Firefox (Mobile)
|
||||||
|
|
|
@ -52,8 +52,9 @@ class Filter:
|
||||||
logo['style'] = 'display:flex; justify-content:center; align-items:center; color:#685e79; font-size:18px;'
|
logo['style'] = 'display:flex; justify-content:center; align-items:center; color:#685e79; font-size:18px;'
|
||||||
|
|
||||||
# Fix search bar length on mobile
|
# Fix search bar length on mobile
|
||||||
search_bar = soup.find('header').find('form').find('div')
|
if self.mobile:
|
||||||
search_bar['style'] = 'width: 100%;'
|
search_bar = soup.find('header').find('form').find('div')
|
||||||
|
search_bar['style'] = 'width: 100%;'
|
||||||
|
|
||||||
# Replace hrefs with only the intended destination (no "utm" type tags)
|
# Replace hrefs with only the intended destination (no "utm" type tags)
|
||||||
for a in soup.find_all('a', href=True):
|
for a in soup.find_all('a', href=True):
|
||||||
|
|
|
@ -2,7 +2,7 @@ from app import app
|
||||||
from app.filter import Filter
|
from app.filter import Filter
|
||||||
from app.request import Request, gen_query
|
from app.request import Request, gen_query
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from flask import g, request, redirect, render_template
|
from flask import g, make_response, request, redirect, render_template
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import urllib.parse as urlparse
|
import urllib.parse as urlparse
|
||||||
|
@ -24,6 +24,18 @@ def index():
|
||||||
return render_template('index.html', bg=bg, ua=g.user_request.modified_user_agent)
|
return render_template('index.html', bg=bg, ua=g.user_request.modified_user_agent)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/opensearch.xml', methods=['GET'])
|
||||||
|
def opensearch():
|
||||||
|
url_root = request.url_root
|
||||||
|
if url_root.endswith('/'):
|
||||||
|
url_root = url_root[:-1]
|
||||||
|
|
||||||
|
template = render_template('opensearch.xml', shoogle_url=url_root)
|
||||||
|
response = make_response(template)
|
||||||
|
response.headers['Content-Type'] = 'application/xml'
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
@app.route('/search', methods=['GET'])
|
@app.route('/search', methods=['GET'])
|
||||||
def search():
|
def search():
|
||||||
q = request.args.get('q')
|
q = request.args.get('q')
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
|
|
||||||
xmlns:moz="http://www.mozilla.org/2006/browser/search/">
|
|
||||||
<ShortName>Shoogle</ShortName>
|
|
||||||
<Description>Shoogle: A lightweight, deployable Google search proxy for desktop/mobile that removes Javascript, AMP links, and ads</Description>
|
|
||||||
<InputEncoding>UTF-8</InputEncoding>
|
|
||||||
<Image width="32" height="32" type="image/x-icon">/static/img/favicon/favicon-32x32.png</Image>
|
|
||||||
<Url type="text/html" template="SHOOGLE_URL/search">
|
|
||||||
<Param name="q" value="{searchTerms}"/>
|
|
||||||
</Url>
|
|
||||||
<Url type="application/x-suggestions+json" template="SHOOGLE_URL/search"/>
|
|
||||||
<moz:SearchForm>SHOOGLE_URL/search</moz:SearchForm>
|
|
||||||
</OpenSearchDescription>
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<meta name="msapplication-TileColor" content="#ffffff">
|
<meta name="msapplication-TileColor" content="#ffffff">
|
||||||
<meta name="msapplication-TileImage" content="/static/img/favicon/ms-icon-144x144.png">
|
<meta name="msapplication-TileImage" content="/static/img/favicon/ms-icon-144x144.png">
|
||||||
<script type="text/javascript" src="/static/js/controller.js"></script>
|
<script type="text/javascript" src="/static/js/controller.js"></script>
|
||||||
<link rel="search" href="/static/opensearch.xml" type="application/opensearchdescription+xml" title="Shoogle Search">
|
<link rel="search" href="/opensearch.xml" type="application/opensearchdescription+xml" title="Shoogle Search">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="stylesheet" href="/static/css/main.css">
|
<link rel="stylesheet" href="/static/css/main.css">
|
||||||
<title>Shoogle Search</title>
|
<title>Shoogle Search</title>
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
script_path = os.path.dirname(os.path.realpath(__file__))
|
|
||||||
template_path = script_path + '/../app/static/opensearch.template'
|
|
||||||
opensearch_path = script_path + '/../app/static/opensearch.xml'
|
|
||||||
replace_tag = 'SHOOGLE_URL'
|
|
||||||
|
|
||||||
if len(sys.argv) != 2:
|
|
||||||
print('You must provide the url as an argument for this script.')
|
|
||||||
print('Example: python opensearch.py "https://my-app-1776.herokuapps.com"')
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
app_url = sys.argv[1].rstrip('/')
|
|
||||||
opensearch_template = open(template_path, 'r').read()
|
|
||||||
|
|
||||||
with open(opensearch_path, 'w') as opensearch_xml:
|
|
||||||
opensearch_xml.write(opensearch_template.replace(replace_tag, app_url))
|
|
||||||
opensearch_xml.close()
|
|
||||||
|
|
||||||
print('\nDone - you may now set Shoogle as your primary search engine')
|
|
Loading…
Reference in New Issue