/** * Get song lyrics from article * * @param $article * @return string */ protected function getLyrics($article) { if (preg_match('#<lyrics>(.*?)<\\/lyrics>#s', $article->getContent(), $matches)) { return LyricsUtils::removeWikitextFromLyrics($matches[1]); } return ''; }
/** * @desc Process Album article page * * @param Article $article * @return array */ public function processArticle(Article $article) { $albumData = ['article_id' => $article->getId()]; $albumData = array_merge($albumData, $this->getHeader($article)); $albumData['album_lowercase'] = LyricsUtils::lowercase($albumData['Album']); $albumData['genres'] = $this->getGenres($article); if (isset($albumData['Genre']) && !in_array($albumData['Genre'], $albumData['genres'])) { $albumData['genres'][] = $albumData['Genre']; } return array_merge($albumData, $this->getFooter($article)); }
/** * @desc Returns lower cased value of field * @param $fieldName * @return string */ public function getLowerCaseField($fieldName) { return LyricsUtils::lowercase($this->getField($fieldName)); }
/** * @param String $message * @param String $input * @param String $expected * * @dataProvider removeBracketsDataProvider */ public function testRemoveBrackets($message, $input, $expected) { $this->assertEquals($expected, LyricsUtils::removeBrackets($input), $message); }
/** * @desc Extract album data from section heading * * @param string $heading - section heading * @return array */ public function getAlbumData($heading) { //==[[Entombed:Serpent Saints The Ten Amendments (2007)|Serpent Saints - The Ten Amendments (2007)]]== $result = []; $headingArr = explode('|', trim($heading, '][= ')); $result['title'] = false; if (count($headingArr) > 1) { $result['title'] = trim($headingArr[0]); $result['year'] = ''; $heading = $headingArr[1]; } if (preg_match('#(.+)\\(([\\d]+)\\)#', $heading, $matches)) { $result['Album'] = trim($matches[1]); $result['year'] = trim($matches[2]); } else { $result['Album'] = trim($heading); } $result['album_name_lc'] = LyricsUtils::lowercase($result['Album']); return $result; }
/** * @desc Gets a song from Solr index if exists * * @param LyricsApiSearchParams $searchParams * * @return null|stdClass */ public function getSong(LyricsApiSearchParams $searchParams) { $query = $this->client->createSelect(); $lowerCaseSongName = $searchParams->getLowerCaseField(LyricsApiController::PARAM_SONG); $queryText = 'type:%1% AND artist_name_lc:%P2% AND ( song_name_lc:%P3% OR song_name_lc:%P4% )'; $params = [LyricsUtils::TYPE_SONG, $searchParams->getLowerCaseField(LyricsApiController::PARAM_ARTIST), $lowerCaseSongName, LyricsUtils::removeBrackets($lowerCaseSongName)]; $query->setQuery($queryText, $params); $query->setFields(['artist_name', 'album_id', 'album_name', 'song_name', 'image', 'itunes', self::INDEX_FIELD_NAME_LYRICS]); $query->setStart(0)->setRows(1); $solrSong = $this->getFirstResult($this->client->select($query)); if (is_null($solrSong)) { return null; } return $this->getOutputSong($solrSong); }