Используется - "octokit.net".
Меня интересует поиск по "repositories", "users" и фильтрация результатов по языку.
Сценарий:
1. Пользователь. Вводит поисковую фразу;
2. Сайт. Выполняет поиск;
3. Сайт. Выводит результат:
a. repositories;
b. users;
Фильтр:
- языки;
После нажатия кнопок "repositories" или "users" в таблицу выводится результат. После нажатия кнопки языки (например "C#"), результаты фильтруются.
Общий результат поиска:
Репозитарии
- Репозитарии - 108 951 результатов
- C# (репозитарий) - 4 315 результатов
**Пользователи**
- Пользователи - ~ 4K результата
- C# (пользователи ) - ~ 72 результата
Как повторить данный сценарий работы поисковика?
Я написал предварительный код, но как сделать чтобы он работал более правильно не понимаю.
Метод не завершен "searchUser(string searchQuery_str)".
Я планирую сделать это по аналогии с «SearchReposit(string searchQuery_str, string lang_str)»
Текущая логика кода:
- поиск по всем репозитариям:
- отправляем запрос;
- получаем получаем ответ;
- поиск по репозитариям которые используют C#:
- отправляем запрос;
- фильтруем запрос по языку "C#";
- получаем ответ;
Т.е. сейчас выполняется для каждого случая отдельный запрос(var request), а мне кажется, что нужно выполнить один запрос, а потом выполнять над ним следующие действия:
- фильтровать;
- сортировать;
- очистить фильтрацию;
- очистить сортировку.
Вопрос в том: как сделать чтобы можно было выполнить один запрос(var request), а потом выполнять над ним следующие действия:
- фильтровать;
- сортировать;
- очистить фильтрацию;
- очистить сортировку;
- вычислить количество результатов поиска?
Правильно ли я понимаю логику и возможно ли это сделать?
Если я правильно понимаю, то работа с поиском "пользователей" будет аналогична с поиском "репозитариев".
Ссылка на документацию по поиску - ссылка
Ссылка на библиотеку octokit.net - ссылка
private async void button1_Click(object sender, EventArgs e)
{
// Получаем поисковую фразу
string searchQuery_str = Search_txB.Text;
string lang_str;
// Поиск по репозитариям. "Результат"
lang_str = "";
var countRepo = await SearchReposit(searchQuery_str, lang_str);
label5.Text = countRepo;
// Поиск по репозитариям. "Результат"
lang_str = "C#";
var countRepoLang = await SearchReposit(searchQuery_str, lang_str);
label7.Text = countRepoLang;
}
public async Task<string> SearchReposit(string searchQuery_str, string lang_str)
{
// Поиск по "Реозитариям"
var request = new SearchRepositoriesRequest(searchQuery_str); // mvc client side framework - Структура клиентской стороны mvc
switch (lang_str)
{
case "C#":
request.Language = Language.CSharp;
break;
}
var resultRepo = await client.Search.SearchRepo(request);
// Количество репозитариев
decimal countRepo_dec = Convert.ToDecimal(resultRepo.TotalCount);
// Количество репозитариев. Форматирование
string countRepo_str = formatValue(countRepo_dec);
return countRepo_str;
}
// Поиск по "Пользователям" ()
public async void searchUser(string searchQuery_str)
{
var request = new SearchUsersRequest(searchQuery_str); // _____
var resultUser = await client.Search.SearchUsers(request);
label6.Text = resultUser.TotalCount.ToString();
// var resultUsers = await client.Search.SearchUsers(request);
}
Используя функцию sort(), вы можете отсортировать репозитории, пользователей и все остальное по указанным в их категориях. Если категория такого-то проекта C#, вы forом сравниваете их категории и, если категория равна той, что на кнопке, вы выводите.
Изменил переменную request:
- было "var" - стало SearchRepositoriesRequest;
- было "локальной" - стало "глобальной";
Изменил метод SearchReposit(string searchQuery_str, string lang_str)
- добавил аргумент "bool null_flg" - стало "SearchReposit(string searchQuery_str, string lang_str, bool null_flg)";
- добавил проверку "bool null_flg";
if (null_flg == false)
{
request = new SearchRepositoriesRequest(searchQuery_str);
}
Код выглядит так
SearchRepositoriesRequest request;
public async Task<string> SearchReposit(string searchQuery_str, string lang_str, bool null_flg)
{
//SearchRepositoriesRequest request = new SearchRepositoriesRequest();
// Поиск по "Реозитариям"
// if (request == null) // ошб
if (null_flg == false)
{
request = new SearchRepositoriesRequest(searchQuery_str); // mvc client side framework - Структура клиентской стороны mvc
// return request;
}
switch (lang_str)
{
case "C#":
request.Language = Language.CSharp;
break;
}
var resultRepo = await client.Search.SearchRepo(request);
// Количество репозитариев
decimal countRepo_dec = Convert.ToDecimal(resultRepo.TotalCount);
// Количество репозитариев. Форматирование
string countRepo_str = formatValue(countRepo_dec);
return countRepo_str;
}
private async void button1_Click(object sender, EventArgs e)
{
// Получаем поисковую фразу
string searchQuery_str = Search_txB.Text;
string lang_str;
bool null_flg;
// Поиск по репозитариям. "Результат"
lang_str = "";
null_flg = false;
var countRepo = await SearchReposit(searchQuery_str, lang_str, null_flg);
null_flg = true;
label5.Text = countRepo;
// Поиск по репозитариям. "Результат"
lang_str = "C#";
var countRepoLang = await SearchReposit(searchQuery_str, lang_str, null_flg);
label7.Text = countRepoLang;
}
Будет ли это нормальным решением или можно сделать более грамотно?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости