Как программно определить, является ли канал RSS полным каналом или частичным каналом

Служба, которую я вызывал (в данном случае Jira Cloud API от Atlassian), поддерживает как базовую, так и OAuth-аутентификацию. Я пытался использовать HTTP Basic, но он отправляет вызов аутентификации для OAuth.

Начиная с текущего JDK 11, HttpClient не отправляет базовые учетные данные, пока их не вызовут с помощью заголовка WWW-Authenticate с сервера. Кроме того, единственный тип вызова, который он понимает, - это обычная проверка подлинности. Соответствующий код JDK находится здесь (в комплекте с TODO для поддержки не только базовой аутентификации), если вы хотите взглянуть.

Тем временем я решил обойти API аутентификации HttpClient, а также сам создать и отправить заголовок Basic Authorization:

public static void main(String[] args) {
    var client = HttpClient.newBuilder()
            .version(HttpClient.Version.HTTP_1_1)
            .build();
    var request = HttpRequest.newBuilder()
            .uri(new URI("https://service-that-needs-auth.example/"))
            .header("Authorization", basicAuth("username", "password"))
            .build();
    client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
            .thenApply(HttpResponse::body)
            .thenAccept(System.out::println)
            .join();
}

private static String basicAuth(String username, String password) {
    return "Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes());
}

10
задан pmurillo 6 February 2009 в 16:38
поделиться

3 ответа

Ищите ссылку в конце, который говорит "Больше", "Продолженный", "Полный текст статьи", "..." или подобный. Если Вы не хотите перейти по каждой ссылке на странице и искать текст от канала плюс дополнительный, возможно.

6
ответ дан 4 December 2019 в 01:32
поделиться

Я не думаю, что существует очень очевидный способ выполнения этого, но здесь два "hacky":

Я проанализировал бы текст RSS и искал бы любые ссылки, выходящие из него. Предоставленный, могло быть несколько ссылок там (некоторые к другим сообщениям в блоге), но если Вы фокусируетесь на последнем и пытаетесь придумать несколько эвристических слов для заголовка ссылки (т.е. "больше", "читайте полный", и т.д.), необходимо смочь получить многие из них. Для большей уверенности можно только посмотреть на ссылки, которые указывают назад на исходный блог.

Более строгий метод имел бы Вас переходящий по всем ссылкам и пытающийся выдержать сравнение, если фрагмент RSS является подмножеством страницы, которая возвращается, или если существует существенное перекрытие. Это не может помочь каждый раз, когда сайт использует истинную сводку в противоположность фрагменту полного сообщения все же.

4
ответ дан 4 December 2019 в 01:32
поделиться

Почему бы не следовать за URL от RSS ленты и проверить, ли существует больше текста на этой странице, чем в RSS ленте? Вы должны были бы взять синтаксический анализатор HTML и вставить некоторые общие правила.

0
ответ дан 4 December 2019 в 01:32
поделиться