Add fulltext search to books, music and console name searches, add safe link for IAFD xxx search.

This commit is contained in:
Darko
2015-03-17 15:27:13 +01:00
parent 3835310f8f
commit 091254c5a0
5 changed files with 101 additions and 23 deletions
+4
View File
@@ -0,0 +1,4 @@
ALTER TABLE musicinfo ADD FULLTEXT INDEX ix_musicinfo_artist_title_ft (artist, title);
ALTER TABLE bookinfo ADD FULLTEXT INDEX ix_bookinfo_author_title_ft (author, title);
ALTER TABLE consoleinfo ADD FULLTEXT INDEX ix_consoleinfo_title_platform_ft (title, platform);
UPDATE `tmux` set `value` = '122' where `setting` = 'sqlpatch';
+24 -8
View File
@@ -101,13 +101,29 @@ class Konsole
public function getConsoleInfoByName($title, $platform)
{
return $this->pdo->queryOneRow(
sprintf(
"SELECT * FROM consoleinfo WHERE title %s AND platform %s",
$this->pdo->likeString($title, true, true),
$this->pdo->likeString($platform, true, true)
)
);
//only used to get a count of words
$searchwords = $searchsql = '';
$ft = $this->pdo->queryDirect("SHOW INDEX FROM consoleinfo WHERE key_name = 'ix_consoleinfo_title_platform_ft'");
if ($ft->rowCount() !== 2) {
$searchsql .= sprintf(" title %s AND platform %s'", $this->pdo->likeString($title, true, true), $this->pdo->likeString($platform, true, true));
} else {
$title = preg_replace('/( - | -|\(.+\)|\(|\))/', ' ', $title);
$title = preg_replace('/[^\w ]+/', '', $title);
$title = trim(preg_replace('/\s\s+/i', ' ', $title));
$title = trim($title);
$words = explode(' ', $title);
foreach ($words as $word) {
$word = trim(rtrim(trim($word), '-'));
if ($word !== '' && $word !== '-') {
$word = '+' . $word;
$searchwords .= sprintf('%s ', $word);
}
}
$searchwords = trim($searchwords);
$searchsql .= sprintf(" MATCH(title, platform) AGAINST(%s IN BOOLEAN MODE)", $this->pdo->escapeString($searchwords));
}
return $this->pdo->queryOneRow(sprintf("SELECT * FROM consoleinfo WHERE %s", $searchsql));
}
public function getRange($start, $num)
@@ -640,7 +656,7 @@ class Konsole
$this->update(
$consoleId, $con['title'], $con['asin'], $con['url'], $con['salesrank'],
$con['platform'], $con['publisher'], $con['releasedate'], $con['esrb'],
$con['platform'], $con['publisher'], (isset($con['releasedate']) ? $con['releasedate']: null), $con['esrb'],
$con['cover'], $con['consolegenreid'], (isset($con['review']) ? $con['review'] : null)
);
}
+30 -1
View File
@@ -97,9 +97,38 @@ class Books
public function getBookInfoByName($author, $title)
{
return $this->pdo->queryOneRow(sprintf('SELECT * FROM bookinfo WHERE author %s AND title %s', $this->pdo->likeString($author, true, true), $this->pdo->likeString($title, true, true)));
$pdo = $this->pdo;
$like = 'ILIKE';
if ($pdo->dbSystem() === 'mysql') {
$like = 'LIKE';
}
//only used to get a count of words
$searchwords = $searchsql = '';
$ft = $pdo->queryDirect("SHOW INDEX FROM bookinfo WHERE key_name = 'ix_bookinfo_author_title_ft'");
if ($ft->rowCount() !== 2) {
$searchsql .= sprintf(" author LIKE %s AND title %s %s'", $pdo->escapeString('%' . $author . '%'), $like, $pdo->escapeString('%' . $title . '%'));
} else {
$title = preg_replace('/( - | -|\(.+\)|\(|\))/', ' ', $title);
$title = preg_replace('/[^\w ]+/', '', $title);
$title = trim(preg_replace('/\s\s+/i', ' ', $title));
$title = trim($title);
$words = explode(' ', $title);
foreach ($words as $word) {
$word = trim(rtrim(trim($word), '-'));
if ($word !== '' && $word !== '-') {
$word = '+' . $word;
$searchwords .= sprintf('%s ', $word);
}
}
$searchwords = trim($searchwords);
$searchsql .= sprintf(" MATCH(author, title) AGAINST(%s IN BOOLEAN MODE)", $pdo->escapeString($searchwords));
}
return $pdo->queryOneRow(sprintf("SELECT * FROM bookinfo WHERE %s", $searchsql));
}
public function getRange($start, $num)
{
if ($start === false) {
+2 -2
View File
@@ -7,8 +7,8 @@ class IAFD
const ADE = "Adult DVD Empire";
const IAFDSEARCHURL = "http://www.iafd.com/results.asp?searchtype=title&searchstring=";
const IAFDURL = "http://www.iafd.com";
const IAFDSEARCHURL = "http://iafd.com.prx.proxyunblocker.org/results.asp?searchtype=title&searchstring=";
const IAFDURL = "http://iafd.com.prx.proxyunblocker.org";
const HM = "Hot Movies";
public $classUsed = "";
public $cookie = "";
+41 -12
View File
@@ -103,7 +103,36 @@ class Musik
*/
public function getMusicInfoByName($artist, $album)
{
return $this->pdo->queryOneRow(sprintf("SELECT * FROM musicinfo WHERE title %s AND artist %s", $this->pdo->likeString($album, true, true), $this->pdo->likeString($artist, true, true)));
$pdo = $this->pdo;
$like = 'ILIKE';
if ($pdo->dbSystem() === 'mysql') {
$like = 'LIKE';
}
//only used to get a count of words
$searchwords = $searchsql = '';
$ft = $pdo->queryDirect("SHOW INDEX FROM musicinfo WHERE key_name = 'ix_musicinfo_artist_title_ft'");
if ($ft->rowCount() !== 2) {
$searchsql .= sprintf(" artist LIKE %s AND title %s %s'", $pdo->escapeString('%' . $artist . '%'), $like, $pdo->escapeString('%' . $album . '%'));
} else {
$album = preg_replace('/( - | -|\(.+\)|\(|\))/', ' ', $album);
$album = preg_replace('/[^\w ]+/', '', $album);
$album = preg_replace('/(WEB|FLAC|CD)/', '', $album);
$album = trim(preg_replace('/\s\s+/i', ' ', $album));
$album = trim($album);
$words = explode(' ', $album);
foreach ($words as $word) {
$word = trim(rtrim(trim($word), '-'));
if ($word !== '' && $word !== '-') {
$word = '+' . $word;
$searchwords .= sprintf('%s ', $word);
}
}
$searchwords = trim($searchwords);
$searchsql .= sprintf(" MATCH(artist, title) AGAINST(%s IN BOOLEAN MODE)", $pdo->escapeString($searchwords));
}
return $pdo->queryOneRow(sprintf("SELECT * FROM musicinfo WHERE %s", $searchsql));
}
/**
@@ -374,7 +403,7 @@ class Musik
}
if (isset($amaz->Items->Item->ItemAttributes->Title)) {
$mus['title'] = (string) $amaz->Items->Item->ItemAttributes->Title;
$mus['title'] = (string)$amaz->Items->Item->ItemAttributes->Title;
if (empty($mus['title'])) {
return false;
}
@@ -390,41 +419,41 @@ class Musik
}
// Get album properties.
$mus['coverurl'] = (string) $amaz->Items->Item->LargeImage->URL;
$mus['coverurl'] = (string)$amaz->Items->Item->LargeImage->URL;
if ($mus['coverurl'] != "") {
$mus['cover'] = 1;
} else {
$mus['cover'] = 0;
}
$mus['asin'] = (string) $amaz->Items->Item->ASIN;
$mus['asin'] = (string)$amaz->Items->Item->ASIN;
$mus['url'] = (string) $amaz->Items->Item->DetailPageURL;
$mus['url'] = (string)$amaz->Items->Item->DetailPageURL;
$mus['url'] = str_replace("%26tag%3Dws", "%26tag%3Dopensourceins%2D21", $mus['url']);
$mus['salesrank'] = (string) $amaz->Items->Item->SalesRank;
$mus['salesrank'] = (string)$amaz->Items->Item->SalesRank;
if ($mus['salesrank'] == "") {
$mus['salesrank'] = 'null';
}
$mus['artist'] = (string) $amaz->Items->Item->ItemAttributes->Artist;
$mus['artist'] = (string)$amaz->Items->Item->ItemAttributes->Artist;
if (empty($mus['artist'])) {
$mus['artist'] = (string) $amaz->Items->Item->ItemAttributes->Creator;
$mus['artist'] = (string)$amaz->Items->Item->ItemAttributes->Creator;
if (empty($mus['artist'])) {
$mus['artist'] = "";
}
}
$mus['publisher'] = (string) $amaz->Items->Item->ItemAttributes->Publisher;
$mus['publisher'] = (string)$amaz->Items->Item->ItemAttributes->Publisher;
$mus['releasedate'] = $this->pdo->escapeString((string) $amaz->Items->Item->ItemAttributes->ReleaseDate);
$mus['releasedate'] = $this->pdo->escapeString((string)$amaz->Items->Item->ItemAttributes->ReleaseDate);
if ($mus['releasedate'] == "''") {
$mus['releasedate'] = 'null';
}
$mus['review'] = "";
if (isset($amaz->Items->Item->EditorialReviews)) {
$mus['review'] = trim(strip_tags((string) $amaz->Items->Item->EditorialReviews->EditorialReview->Content));
$mus['review'] = trim(strip_tags((string)$amaz->Items->Item->EditorialReviews->EditorialReview->Content));
}
$mus['year'] = $year;
@@ -434,7 +463,7 @@ class Musik
$mus['tracks'] = "";
if (isset($amaz->Items->Item->Tracks)) {
$tmpTracks = (array) $amaz->Items->Item->Tracks->Disc;
$tmpTracks = (array)$amaz->Items->Item->Tracks->Disc;
$tracks = $tmpTracks['Track'];
$mus['tracks'] = (is_array($tracks) && !empty($tracks)) ? implode('|', $tracks) : '';
}