diff --git a/data.sample.db b/data.sample.db
index 9a92003..7e0cc5f 100644
Binary files a/data.sample.db and b/data.sample.db differ
diff --git a/index.php b/index.php
index 919bdf2..1f432aa 100644
--- a/index.php
+++ b/index.php
@@ -1,27 +1,183 @@
prepare('SELECT * FROM book WHERE category_slug = :category_slug');
+ $stmt = $db->prepare('SELECT b.*, group_concat(a.name, "|") as author_name, s.id as star FROM book as b LEFT JOIN author_book as ab ON b.id = ab.book_id LEFT JOIN author AS a ON ab.author_id = a.id LEFT JOIN star AS s on s.book_id = b.id WHERE category_slug = :category_slug GROUP BY b.id ');
$stmt->bindValue(':category_slug', $_GET['category'], SQLITE3_TEXT);
} elseif (isset($_GET['search']) && isset($_GET['search_title']) && !empty($_GET['search_title'])) {
- $stmt = $db->prepare('SELECT * FROM book WHERE title like :search');
+ $stmt = $db->prepare('SELECT b.*, group_concat(a.name, "|") as author_name, s.id as star FROM book as b LEFT JOIN author_book as ab ON b.id = ab.book_id LEFT JOIN author AS a ON ab.author_id = a.id LEFT JOIN star AS s on s.book_id = b.id WHERE title like :search GROUP BY b.id ');
$stmt->bindValue(':search', '%' . $_GET['search_title'] . '%', SQLITE3_TEXT);
+} elseif (isset($_GET['author']) && !empty($_GET['author'])) {
+ $stmt = $db->prepare('SELECT b.*, group_concat(a.name, "|") as author_name, s.id as star FROM book as b LEFT JOIN author_book as ab ON b.id = ab.book_id LEFT JOIN author AS a ON ab.author_id = a.id LEFT JOIN star AS s on s.book_id = b.id WHERE a.name = :author GROUP BY b.id ');
+ $stmt->bindValue(':author', $_GET['author'], SQLITE3_TEXT);
+} elseif (isset($_GET['book']) && !empty($_GET['book'])) {
+ $stmt = $db->prepare('SELECT * FROM chapter WHERE book_id = :book');
+ $stmt->bindValue(':book', $_GET['book'], SQLITE3_INTEGER);
+ $result = $stmt->execute();
+
+ $chaptersArray = [];
+
+ while ($chapter = $result->fetchArray(SQLITE3_ASSOC)) {
+ if (!$chapter['parent_id']) {
+ $chaptersArray[$chapter['id']] = ['name' => $chapter['name'], 'order' => $chapter['chapter_number'], 'subchapter' => []];
+ } else {
+ $chaptersArray[$chapter['parent_id']]['subchapter'][$chapter['chapter_number']] = ['id' => $chapter['id'], 'name' => $chapter['name']];
+ }
+ }
+ $stmt = $db->prepare('SELECT b.*, group_concat(a.name, "|") as author_name, s.id as star FROM book as b LEFT JOIN author_book as ab ON b.id = ab.book_id LEFT JOIN author AS a ON ab.author_id = a.id LEFT JOIN star AS s on s.book_id = b.id WHERE b.id = :book GROUP BY b.id ');
+ $stmt->bindValue(':book', $_GET['book'], SQLITE3_INTEGER);
+
+} elseif (isset($_GET['star']) && !empty($_GET['star'])) {
+
+ $stmt = $db->prepare('SELECT * FROM star WHERE book_id = :book');
+ $stmt->bindValue(':book', $_GET['star'], SQLITE3_INTEGER);
+ $result = $stmt->execute();
+ if ($result->fetchArray(SQLITE3_ASSOC) === false) {
+ $insertStmt = $db->prepare('INSERT INTO star (book_id, user_id) VALUES (:book_id, :user_id) ');
+ $insertStmt->bindValue(':book_id', $_GET['star'], SQLITE3_INTEGER);
+ $insertStmt->bindValue(':user_id', 1, SQLITE3_INTEGER);
+ $insertStmt->execute();
+ } else {
+ $stmt = $db->prepare('DELETE FROM star WHERE book_id = :book');
+ $stmt->bindValue(':book', $_GET['star'], SQLITE3_INTEGER);
+ $result = $stmt->execute();
+ }
+ if (isset($_SERVER['HTTP_REFERER'])) {
+ header('Location: ' . $_SERVER['HTTP_REFERER']);
+ } else {
+ header('Location: /');
+ }
} else {
- $stmt = $db->prepare('SELECT * FROM book ');
+ $stmt = $db->prepare('SELECT b.*, group_concat(a.name, "|") as author_name, s.id as star FROM book as b LEFT JOIN author_book as ab ON b.id = ab.book_id LEFT JOIN author AS a ON ab.author_id = a.id LEFT JOIN star AS s on s.book_id = b.id GROUP BY b.id');
}
$result = $stmt->execute();
+?>
+
+
+
+
+Search Clear ";
echo '
';
-print(' id nid Title Category Publish date Pages Votes Rating Pdf Epub Mobi Code ');
+print(' nid Title Category Author Publish date Pages Votes Rating Pdf Epub Mobi Code ');
while ($resultArray = $result->fetchArray(SQLITE3_ASSOC)) {
+
$pdfUrl = 'books/' . $resultArray['nid'] . '/' . $resultArray['nid'] . '.pdf';
$epubUrl = 'books/' . $resultArray['nid'] . '/' . $resultArray['nid'] . '.epub';
$mobiUrl = 'books/' . $resultArray['nid'] . '/' . $resultArray['nid'] . '.mobi';
@@ -30,16 +186,34 @@ while ($resultArray = $result->fetchArray(SQLITE3_ASSOC)) {
$codeId = $found[0];
$codeUrl = 'books/' . $codeId . '/' . $codeId . '.zip';
}
- printf(' %d %d %s %s %s %s %d %.1f %s %s %s %s ',
- $resultArray['id'], $resultArray['nid'], $resultArray['url'], $resultArray['title'], $resultArray['category_slug'], $resultArray['category'], $resultArray['datepublished'], $resultArray['numberofpages'], $resultArray['reviewCount'], $resultArray['ratingValue'],
+
+
+ $authorsArray = explode('|', $resultArray['author_name']);
+ $authors = [];
+ foreach ($authorsArray as $author) {
+ $authors[] = '' . $author . ' ';
+ }
+ printf(' %d %s %s %s %s %s %s %d %.1f %s %s %s %s ',
+ $resultArray['url'], $resultArray['nid'], $resultArray['star'] ? 'on' : 'off', $resultArray['id'], $resultArray['star'] ? '★' : '☆', $resultArray['id'], $resultArray['title'], $resultArray['category_slug'], $resultArray['category'], implode(', ', $authors), $resultArray['datepublished'], $resultArray['numberofpages'], $resultArray['reviewCount'], $resultArray['ratingValue'],
is_file($pdfUrl) ? "pdf " : (strlen($resultArray['pdf']) ? 'nie pobrano' : ''),
is_file($epubUrl) ? "epub " : (strlen($resultArray['epub']) ? 'nie pobrano' : ''),
is_file($mobiUrl) ? "mobi " : (strlen($resultArray['mobi']) ? 'nie pobrano' : ''),
is_file($codeUrl) ? "zip " : (strlen($resultArray['code']) ? 'nie pobrano' : '')
);
- if ($resultArray) {
- $x = $resultArray;
+ if (isset($chaptersArray) && $chaptersArray != []) {
+ $table = '';
+ foreach ($chaptersArray as $chapter) {
+ $table .= '' . $chapter['name'] . ' ';
+ foreach ($chapter['subchapter'] as $subchapter) {
+ $table .= '' . $subchapter['name'] . ' ';
+ }
+ }
+ $table .= '
';
+ echo $table;
}
+// if ($resultArray) {
+// $x = $resultArray;
+// }
}
-echo '
';
+echo '';
diff --git a/packt.php b/packt.php
index b36bee0..fcd492e 100644
--- a/packt.php
+++ b/packt.php
@@ -46,7 +46,6 @@ function c($url, $post = [], $localFilePath = null)
return $server_output;
}
-
function resolveBookUrl($bookUrl)
{
return 'https://www.packtpub.com/' . trim(str_replace('https://www.packtpub.com/', '', $bookUrl), '/');
@@ -96,122 +95,210 @@ function getBookInfo($bookUrl)
}
+function saveBookChapters($data, $bookId)
+{
+ $db = new SQLite3('data.db');
+ print_r($data);
+ foreach ($data['toc'] as $chapterNumber => $chapter) {
+
+ $stmt = $db->prepare('REPLACE INTO chapter (book_id, chapter_number, parent_id, name)
+ VALUES (:book_id, :chapter_number, :parent_id, :name)');
+ $stmt->bindValue(':book_id', $bookId, SQLITE3_INTEGER);
+ $stmt->bindValue(':chapter_number', $chapterNumber + 1, SQLITE3_INTEGER);
+ $stmt->bindValue(':parent_id', null, SQLITE3_INTEGER);
+ $stmt->bindValue(':name', $chapter['title'], SQLITE3_TEXT);
+ $result = $stmt->execute();
+
+ $stmt = $db->prepare('select seq from sqlite_sequence where name="chapter"');
+ $result = $stmt->execute();
+ $lastInsertedId = $result->fetchArray(SQLITE3_ASSOC);
+ $lastInsertedId['seq'];
+
+ if (isset($chapter['subchapters'])) {
+ foreach ($chapter['subchapters'] as $subChapterNumber => $subChapterName) {
+
+ $stmt = $db->prepare('REPLACE INTO chapter (book_id, chapter_number, parent_id, name)
+ VALUES (:book_id, :chapter_number, :parent_id, :name)');
+ $stmt->bindValue(':book_id', $bookId, SQLITE3_INTEGER);
+ $stmt->bindValue(':chapter_number', $subChapterNumber + 1, SQLITE3_INTEGER);
+ $stmt->bindValue(':parent_id', $lastInsertedId['seq'], SQLITE3_INTEGER);
+ $stmt->bindValue(':name', $subChapterName, SQLITE3_TEXT);
+ $result = $stmt->execute();
+ }
+ }
+ }
+
+}
+
+
+echo '';
+
+//$data = getBookInfo('big-data-and-business-intelligence/mastering-blockchain');
+//file_put_contents('data.txt', json_encode($data));
+//die();
$db = new SQLite3('data.db');
+//$stmt = $db->prepare('SELECT * FROM book ORDER BY random() limit 1 ');
+$stmt = $db->prepare('select * from book');
+$booksResult = $stmt->execute();
+while ($book = $booksResult->fetchArray(SQLITE3_ASSOC)) {
+ $data = getBookInfo($book['url']);
+// saveBookChapters($data, $book['id']);
+
+// $db = new SQLite3('data.db');
+// print_r($data);
+ foreach ($data['toc'] as $chapterNumber => $chapter) {
+
+ $stmt = $db->prepare('REPLACE INTO chapter (book_id, chapter_number, parent_id, name)
+ VALUES (:book_id, :chapter_number, :parent_id, :name)');
+ $stmt->bindValue(':book_id', $book['id'], SQLITE3_INTEGER);
+ $stmt->bindValue(':chapter_number', $chapterNumber + 1, SQLITE3_INTEGER);
+ $stmt->bindValue(':parent_id', null, SQLITE3_INTEGER);
+ $stmt->bindValue(':name', $chapter['title'], SQLITE3_TEXT);
+ $result = $stmt->execute();
+
+ $stmt = $db->prepare('select seq from sqlite_sequence where name="chapter"');
+ $result = $stmt->execute();
+ $lastInsertedId = $result->fetchArray(SQLITE3_ASSOC);
+ $lastInsertedId['seq'];
+
+ if (isset($chapter['subchapters'])) {
+ foreach ($chapter['subchapters'] as $subChapterNumber => $subChapterName) {
+
+ $stmt = $db->prepare('REPLACE INTO chapter (book_id, chapter_number, parent_id, name)
+ VALUES (:book_id, :chapter_number, :parent_id, :name)');
+ $stmt->bindValue(':book_id', $book['id'], SQLITE3_INTEGER);
+ $stmt->bindValue(':chapter_number', $subChapterNumber + 1, SQLITE3_INTEGER);
+ $stmt->bindValue(':parent_id', $lastInsertedId['seq'], SQLITE3_INTEGER);
+ $stmt->bindValue(':name', $subChapterName, SQLITE3_TEXT);
+ $result = $stmt->execute();
+ }
+ }
+ }
+
+
+
+}
+
+//$data = json_decode(file_get_contents('data.txt'), 1);
+//$bookId = 1;
+
+
+//print_r($data);
+
+
+function fetchAuthorsByBooks()
+{
+ $db = new SQLite3('data.db');
//$stmt = $db->prepare('SELECT * FROM book order by random() limit 1 ');
-$stmt = $db->prepare('select * from book');
-$stmt = $db->prepare('select * from book left join author_book ON book.id = author_book.book_id where author_book.book_id is null and category is not null');
-$booksResult = $stmt->execute();
+ $stmt = $db->prepare('select * from book');
+ $booksResult = $stmt->execute();
//$bookData = $result->fetchArray(SQLITE3_ASSOC);
-echo '';
-while ($book = $booksResult->fetchArray(SQLITE3_ASSOC)) {
- $bookInfo = getBookInfo($book['url']);
-
-
- foreach ($bookInfo['authors'] as $author) {
- $stmt = $db->prepare('SELECT * FROM author WHERE name = :name and bio = :bio');
- $stmt->bindValue(':name', trim($author['name']), SQLITE3_TEXT);
- $stmt->bindValue(':bio', $author['bio'], SQLITE3_TEXT);
- $result = $stmt->execute();
- $authorData = $result->fetchArray(SQLITE3_ASSOC);
-
- if (!$authorData) {
- $stmt = $db->prepare('INSERT INTO author(name, bio) VALUES (:name, :bio)');
+ while ($book = $booksResult->fetchArray(SQLITE3_ASSOC)) {
+ $bookInfo = getBookInfo($book['url']);
+ foreach ($bookInfo['authors'] as $author) {
+ $stmt = $db->prepare('SELECT * FROM author WHERE name = :name and bio = :bio');
$stmt->bindValue(':name', trim($author['name']), SQLITE3_TEXT);
$stmt->bindValue(':bio', $author['bio'], SQLITE3_TEXT);
$result = $stmt->execute();
+ $authorData = $result->fetchArray(SQLITE3_ASSOC);
- $stmt = $db->prepare('select seq from sqlite_sequence where name="author"');
- $result = $stmt->execute();
- $seqData = $result->fetchArray(SQLITE3_ASSOC);
+ if (!$authorData) {
+ $stmt = $db->prepare('INSERT INTO author(name, bio) VALUES (:name, :bio)');
+ $stmt->bindValue(':name', trim($author['name']), SQLITE3_TEXT);
+ $stmt->bindValue(':bio', $author['bio'], SQLITE3_TEXT);
+ $result = $stmt->execute();
- $stmt = $db->prepare('INSERT INTO author_book(author_id, book_id) VALUES (:author_id, :book_id)');
- $stmt->bindValue(':author_id', $seqData['seq'], SQLITE3_INTEGER);
- $stmt->bindValue(':book_id', $book['id'], SQLITE3_INTEGER);
- $result = $stmt->execute();
- } else {
- $stmt = $db->prepare('INSERT INTO author_book(author_id, book_id) VALUES (:author_id, :book_id)');
- $stmt->bindValue(':author_id', $authorData['id'], SQLITE3_INTEGER);
- $stmt->bindValue(':book_id', $book['id'], SQLITE3_INTEGER);
- $result = $stmt->execute();
+ $stmt = $db->prepare('select seq from sqlite_sequence where name="author"');
+ $result = $stmt->execute();
+ $seqData = $result->fetchArray(SQLITE3_ASSOC);
+
+ $stmt = $db->prepare('INSERT INTO author_book(author_id, book_id) VALUES (:author_id, :book_id)');
+ $stmt->bindValue(':author_id', $seqData['seq'], SQLITE3_INTEGER);
+ $stmt->bindValue(':book_id', $book['id'], SQLITE3_INTEGER);
+ $result = $stmt->execute();
+ } else {
+ $stmt = $db->prepare('INSERT INTO author_book(author_id, book_id) VALUES (:author_id, :book_id)');
+ $stmt->bindValue(':author_id', $authorData['id'], SQLITE3_INTEGER);
+ $stmt->bindValue(':book_id', $book['id'], SQLITE3_INTEGER);
+ $result = $stmt->execute();
+ }
}
-
- var_dump($authorData);
-
}
+
}
-//print_r($bookData);
-//print_r($bookInfo);
+function downloadBooks()
+{
-
-$return = c('https://www.packtpub.com/', $loginData);
-$return = c('https://www.packtpub.com/account/my-ebooks');
-$document = new Document($return);
+ global $loginData;
+ $return = c('https://www.packtpub.com/', $loginData);
+ $return = c('https://www.packtpub.com/account/my-ebooks');
+ $document = new Document($return);
//
//$document = new Document('packt.html', true);
-$booksData = [];
-$books = $document->find('.product-line.unseen');
+ $booksData = [];
+ $books = $document->find('.product-line.unseen');
-$dl = 0;
-$db = new SQLite3('data.db');
+ $dl = 0;
+ $db = new SQLite3('data.db');
//shuffle($books);
-foreach ($books as $book) {
+ foreach ($books as $book) {
- $bookData = [];
- $bookData['title'] = str_replace(["\r\n"], '', trim($book->first('.title::text')));
- $bookData['nid'] = (int)$book->attr('nid');
+ $bookData = [];
+ $bookData['title'] = str_replace(["\r\n"], '', trim($book->first('.title::text')));
+ $bookData['nid'] = (int)$book->attr('nid');
- $bookData['pdf'] = truncateBookUrl($book->first('a[href$=pdf]::attr(href)'));
- $bookData['epub'] = truncateBookUrl($book->first('a[href$=epub]::attr(href)'));
- $bookData['mobi'] = truncateBookUrl($book->first('a[href$=mobi]::attr(href)'));
- $bookData['code'] = truncateBookUrl($book->first('a[href*=code_download]::attr(href)'));
- $bookData['isbn'] = $book->first('div[isbn]::attr(isbn)');
- $bookData['img'] = $book->first('img[class*=imagecache]::attr(src)');
- $bookData['url'] = truncateBookUrl($book->first('div[class*=product-thumbnail]')->first('a::attr(href)'));
+ $bookData['pdf'] = truncateBookUrl($book->first('a[href$=pdf]::attr(href)'));
+ $bookData['epub'] = truncateBookUrl($book->first('a[href$=epub]::attr(href)'));
+ $bookData['mobi'] = truncateBookUrl($book->first('a[href$=mobi]::attr(href)'));
+ $bookData['code'] = truncateBookUrl($book->first('a[href*=code_download]::attr(href)'));
+ $bookData['isbn'] = $book->first('div[isbn]::attr(isbn)');
+ $bookData['img'] = $book->first('img[class*=imagecache]::attr(src)');
+ $bookData['url'] = truncateBookUrl($book->first('div[class*=product-thumbnail]')->first('a::attr(href)'));
- $stmt = $db->prepare('SELECT id FROM book WHERE nid = :nid');
- $stmt->bindValue(':nid', $bookData['nid'], SQLITE3_INTEGER);
- $result = $stmt->execute();
-
- $resultData = $result->fetchArray(SQLITE3_ASSOC);
-
- $dl += downloadBook($bookData['pdf']);
- $dl += downloadBook($bookData['epub']);
- $dl += downloadBook($bookData['mobi']);
- $dl += downloadBook($bookData['code']);
-
-
- if (!$resultData) {
- $bookData['info'] = getBookInfo($bookData['url']);
- $stmt = $db->prepare('REPLACE INTO book (nid, title, isbn, img, url, datepublished, numberofpages, reviewCount, ratingValue, category, pdf, epub, mobi, code)
-VALUES (:nid, :title, :isbn, :img, :url, :datepublished, :numberofpages, :reviewCount, :ratingValue, :category, :pdf, :epub, :mobi, :code)');
+ $stmt = $db->prepare('SELECT id FROM book WHERE nid = :nid');
$stmt->bindValue(':nid', $bookData['nid'], SQLITE3_INTEGER);
- $stmt->bindValue(':title', $bookData['title'], SQLITE3_TEXT);
- $stmt->bindValue(':isbn', $bookData['isbn'], SQLITE3_TEXT);
- $stmt->bindValue(':img', $bookData['img'], SQLITE3_TEXT);
- $stmt->bindValue(':url', $bookData['url'], SQLITE3_TEXT);
- $stmt->bindValue(':datepublished', $bookData['info']['datepublished'], SQLITE3_TEXT);
- $stmt->bindValue(':numberofpages', $bookData['info']['numberofpages'], SQLITE3_INTEGER);
- $stmt->bindValue(':reviewCount', $bookData['info']['reviewCount'], SQLITE3_INTEGER);
- $stmt->bindValue(':ratingValue', (float)$bookData['info']['ratingValue'], SQLITE3_FLOAT);
- $stmt->bindValue(':category', $bookData['info']['category'], SQLITE3_TEXT);
- $stmt->bindValue(':pdf', $bookData['pdf'], SQLITE3_TEXT);
- $stmt->bindValue(':epub', $bookData['epub'], SQLITE3_TEXT);
- $stmt->bindValue(':mobi', $bookData['mobi'], SQLITE3_TEXT);
- $stmt->bindValue(':code', $bookData['code'], SQLITE3_TEXT);
$result = $stmt->execute();
- }
- echo $dl . ' - ';
- if ($dl > 500) {
-// var_dump($dl);
- die();
- }
+ $resultData = $result->fetchArray(SQLITE3_ASSOC);
+
+ $dl += downloadBook($bookData['pdf']);
+ $dl += downloadBook($bookData['epub']);
+ $dl += downloadBook($bookData['mobi']);
+ $dl += downloadBook($bookData['code']);
+
+
+ if (!$resultData) {
+ $bookData['info'] = getBookInfo($bookData['url']);
+ $stmt = $db->prepare('REPLACE INTO book (nid, title, isbn, img, url, datepublished, numberofpages, reviewCount, ratingValue, category, pdf, epub, mobi, code)
+VALUES (:nid, :title, :isbn, :img, :url, :datepublished, :numberofpages, :reviewCount, :ratingValue, :category, :pdf, :epub, :mobi, :code)');
+ $stmt->bindValue(':nid', $bookData['nid'], SQLITE3_INTEGER);
+ $stmt->bindValue(':title', $bookData['title'], SQLITE3_TEXT);
+ $stmt->bindValue(':isbn', $bookData['isbn'], SQLITE3_TEXT);
+ $stmt->bindValue(':img', $bookData['img'], SQLITE3_TEXT);
+ $stmt->bindValue(':url', $bookData['url'], SQLITE3_TEXT);
+ $stmt->bindValue(':datepublished', $bookData['info']['datepublished'], SQLITE3_TEXT);
+ $stmt->bindValue(':numberofpages', $bookData['info']['numberofpages'], SQLITE3_INTEGER);
+ $stmt->bindValue(':reviewCount', $bookData['info']['reviewCount'], SQLITE3_INTEGER);
+ $stmt->bindValue(':ratingValue', (float)$bookData['info']['ratingValue'], SQLITE3_FLOAT);
+ $stmt->bindValue(':category', $bookData['info']['category'], SQLITE3_TEXT);
+ $stmt->bindValue(':pdf', $bookData['pdf'], SQLITE3_TEXT);
+ $stmt->bindValue(':epub', $bookData['epub'], SQLITE3_TEXT);
+ $stmt->bindValue(':mobi', $bookData['mobi'], SQLITE3_TEXT);
+ $stmt->bindValue(':code', $bookData['code'], SQLITE3_TEXT);
+ $result = $stmt->execute();
+ }
+ echo $dl . ' - ';
+ if ($dl > 500) {
+// var_dump($dl);
+ die();
+ }
+ }
}
function downloadBook($url)