Извлечение части URL (имени блога) с помощью Groovy - PullRequest
0 голосов
/ 27 октября 2018

Я работаю со следующим URL: http://www.espn.com/blog/stephania-bell/post/_/id/3563/key-fantasy-football-injury-updates-for-week-4-2

Я пытаюсь извлечь название блога как (stephania-bell).

Я реализовал следующую функцию для извлечения ожидаемого значения из URL:

def getBlogName( def decodeUrl )
{
    def urlParams = this.paramsParser.parseURIToMap( URI.create( decodeUrl ) )
    def temp = decodeUrl.replace( "http://www.espn.com", "" )
            .replaceAll( "(/_/|\\?).*", "" )
            .replace( "/index", "" )
            .replace( "/insider", "" )
            .replace( "/post", "" )
            .replace( "/tag", "" )
            .replace( "/category", "" )
            .replace( "/", "" )
            .replace( "/blog/", "" )
    def blogName = temp.replace( "/", "" )
    return blogName
}

Однако я что-то упускаю и возвращаемое значение равно blogstephania-bell. Не могли бы вы помочь мне понять, чего мне не хватает в реализации функции? Или, может быть, есть лучший способ сделать то же самое?

Ответы [ 3 ]

0 голосов
/ 27 октября 2018

Может быть более полезным обрабатывать URL как его, затем извлекать путь, а затем разбивать и извлекать соответствующий сегмент пути.

String plainText="http://www.espn.com/blog/stephania-bell/post/_/id/3563/key-fantasy-football-injury-updates-for-week-4-2";

def url = plainText.toURL();
def fullPath=url.getPath();
def pathSegments = fullPath.split("/")
assert "stephania-bell" == pathSegments[2]
0 голосов
/ 27 октября 2018

Не то, что вы спросили, а просто для удовольствия (сначала я подумал, что это то, что вы хотели)

@Grab('org.jsoup:jsoup:1.11.3')
import static org.jsoup.Jsoup.connect

def name = connect('http://www.espn.com/blog/stephania-bell/post/_/id/3563/key-fantasy-football-injury-updates-for-week-4-2')
  .get()
  .select('.sticky-header h1 a')
  .text()

assert name == 'Stephania Bell Blog'
0 голосов
/ 27 октября 2018

Этот вид работы может быть легко обработан регулярным выражением. Если мы хотим извлечь часть URL между http://www.espn.com/blog/ и следующим /, то следующий код поможет:

import java.util.regex.Pattern

def url = 'http://www.espn.com/blog/stephania-bell/post/_/id/3563/key-fantasy-football-injury-updates-for-week-4-2'

def pattern = Pattern.compile('^https?://www\\.espn\\.com/blog/([^/]+)/.*$')

def (_, blog) = (url =~ pattern)[0]

assert blog == 'stephania-bell'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...