Вынуждая% s выходить из пробелов с плюсом вместо процентов двадцать

9

Я хотел бы использовать mc в качестве ярлыка поиска для metacritic.com из Google Chrome. Для ярлыка я настроил следующий поисковый URL:

http://metacritic.com/search/all/%s/results

К сожалению, когда я ищу патриция III следующим образом

mc patrcian iii

Chrome создает этот запрос, который метакритически неверно интерпретирует, чтобы получить бесполезный набор несвязанных результатов:

http://www.metacritic.com/search/all/patrician%20iii/results

Metacritic нравится этот запрос, давая мне именно тот результат, который я искал:

http://www.metacritic.com/search/all/patrician+iii/results

Как заставить Chrome использовать символы плюс вместо пробелов в кодировке URL?

sheldonh
источник
(IE позволяет вам выбрать escape-символ, используемый для нескольких разных. Однако разработчики Chrome знают лучше, чем пользователи. :-|)
Synetech

Ответы:

4

Хотя это немного грубовато, вы можете создать простые расширения Chrome, которые настраивают URL для метакритики (или других сайтов, если хотите)

Вот код, который я использовал для расширения «Замена метакритического поиска»:

manifest.json:

{
    "content_scripts": [ {
    "include_globs": [ "http://www.metacritic.com/search/*%20*" ],
    "js": [ "script.js" ],
        "matches": [ "http://*/*", "https://*/*" ],
        "run_at": "document_start"
    } ],
    "converted_from_user_script": true,
    "description": "Replaces '%20' in metacritic search request to '+'",
    "name": "Metacritic search replacer",
    "version": "0.1"
}

script.js:

window.location = window.location.href.replace(/%20/g, "+");

Поскольку у меня нет надежного места для загрузки моего расширения, вот инструкции по созданию расширения Chrome с использованием этих двух файлов:

Во-первых, поместите два файла в папку и перейдите к chrome: // extensions. Убедитесь, что режим разработчика активен (посмотрите в правом верхнем углу страницы, чтобы включить это). Здесь вы можете выбрать «Pack extension ..», который попросит вас указать папку, в которой находится ваш скрипт. После того, как вы выбрали эту папку, расширение будет создано, и вы можете просто перетащить его в Chrome для установки. Если все прошло по плану, сценарий перезапишет URL-адрес запроса поиска Metacritic с символов «% 20» на символы «+».

Теперь вы можете использовать http://metacritic.com/search/all/%s/resultsв качестве URL-адреса поисковой системы самого Chrome, чтобы использовать ярлык для этого поиска.

Надеюсь это поможет.. ;)

JiriB
источник
Это на самом деле выглядит красиво. Вы можете загрузить его на GitHub или что-то.
Slhck
Вот расширение (.crx) и источник: ссылка
JiriB
5

Вам не нужно использовать стиль поиска REST, но вместо этого можно использовать обычные параметры HTTP GET, например:

http://www.metacritic.com/search/all/results?search_term=test+query

Так что в вашем случае это будет:

http://www.metacritic.com/search/all/results?search_term=%s

К сожалению, это не работает с Metacricic (?).

Лучшее, что я мог получить, - это следующая функция поиска, однако она по какой-то причине не перенаправляет:

data:text/html;charset=utf-8,<script>var s = "%s"; s = s.replace("%20", "+"); var url = "http://www.metacritic.com/search/all/" + s + "/results"; window.location = url;</script>

Справочная информация:

Chrome кодирует отправленные параметры в зависимости от позиции, т. Е. Находится ли она внутри URL или как параметр GET. Внутри URL имеет смысл преобразовать пробел в %20, тогда как в параметре +используется.

К сожалению, они не могут изменить это поведение , поэтому я думаю, что простая строка Javascript могла бы это исправить. Я посмотрю на это.

slhck
источник
Вы пробовали это? Не работает на патриция iii.
Шелдон
Многие системы фактически используют переписывание HTTP для сопоставления имен путей с запросами HTTP GET.
Маженко
@sheldonh Это интересно, потому что поисковый термин вставлен правильно, я посмотрю на него.
Slhck
@slhck Да, то, что ты делаешь, действительно должно работать. Спасибо за ваше время и внимание.
Шелдон
@sheldonh Я нашел метод и отредактировал свое сообщение, к сожалению, Chrome еще не перенаправил, но мы находимся на шаг вперед в поиске решения.
slhck
3

Как указывает slhck в своем ответе, Chrome поддерживает только% s и настаивает на «интеллектуальном» определении, использовать ли символы «плюс» или %20выходить из пробелов (см. Ошибку Chromium 78429 ).

Конкретный тестовый пример, с которым я имею дело (metacritic.com), накладывает слишком много скачков, чтобы прыгать одновременно с их поисковым интерфейсом RESTful.

Поэтому в качестве обходного пути я решил просто использовать устаревший интерфейс app.metacritic.com:

http://apps.metacritic.com/search/process?tfs=game_title&sb=0&game_platform=PC&­ts=%s

Если бы этого не было, я бы связался с metacritic.com, отослал их к ошибке Chromium и попросил пощады. :-)

sheldonh
источник
Видимо это перестало работать. :-(
А.Донда
1

Я не смог получить ни .crx, ни .js для правильной установки (возможно, это моя ошибка).

Мне удалось заставить его работать, опираясь на скрипт greasemonkey (я лично использую расширение Tampermonkey google chrome для обработки скриптов greasemonkey).

Оказавшись в Tampermonkey, я создаю новый скрипт и вставляю следующее (и это работает! Еще раз, ОГРОМНОЕ СПАСИБО JiriB, так как я просто копирую / вставляю его выводы):

// ==UserScript==
// @name         Google-Chrome-URL-Replacer-Extension (Metacritic)
// @namespace    https://github.com/FjearJiri/Google-Chrome-URL-Replacer-Extension/
// @version      1.0
// @description  Replaces %20 with + in URLs in order to build valid URLS for search engine shortcuts
// @include      http://www.metacritic.com/search/*%20*
// @copyright    2011+, FjearJiri ('ported' to greasemonkey script by zifnab)
// ==/UserScript==
// http://superuser.com/questions/281934/forcing-s-to-escape-spaces-with-plus-instead-of-percent-twenty
window.location = window.location.href.replace(/%20/g, "+");
zifnab
источник
1

У меня были трудности с этим же, и нашел эту страницу. К сожалению, ответы были либо слишком сложными, либо, как и унаследованная идея поиска, не работали, и затем я внезапно вспомнил, что я делал с метакритикой, которая заключалась в поиске в Google, потому что поисковая система метакритики была настолько бедна (до сих пор , фактически). Итак, я сделал поиск в Google и сделал мой метакритический поиск:

https://www.google.com/search?gcx=w&ix=c2&sourceid=chrome&ie=UTF-8&q=site%3Ametacritic.com+%s

Очевидно, что он не идеален, потому что вы не получаете привлекательную страницу результатов поиска метакритика, но она дает полезные результаты. Я также создал определенные версии канала; например, если я хочу искать телешоу, я использую тот же движок с добавленным "/ tv /".

Чарльз Херольд
источник
1

Изменить: я добавил это базовое расширение в Chrome Store, я также добавил значки, но в остальном не изменил код. Да, теперь Chrome может просто делать свое дело, и я могу удалить его из папки загрузки! Ссылка: Metacritic Search Fixer .

Исходное сообщение : Я обновил код расширения JiriB, чтобы он снова работал в Chrome! Это действительно просто нужно одну дополнительную строку. Я никогда раньше не использовал github, но разветвил его проект и отправил запрос на извлечение.

manifest.json:

{
"content_scripts": [ {
"include_globs": [ "http://www.metacritic.com/search/*%20*" ],
"js": [ "script.js" ],
    "matches": [ "http://*/*", "https://*/*" ],
    "run_at": "document_start"
} ],
"converted_from_user_script": true,
"description": "Replaces '%20' in metacritic search request to '+'",
"name": "Metacritic search fixer",
"manifest_version": 2,
"version": "0.2.2"
}

script.js:

window.location = window.location.href.replace(/%20/g, "+");
Stainboy
источник