بعد از این که کتابخوان کیندل رو گرفتم، فهمیدم که کتابهای فیدیبو و طاقچه رو نمیشه روی کیندل خوند و صرفا بیشتر برای مطالعه کتابهای انگلیسی میشه استفاده کرد. اما از اون جایی که کلی کتاب تو لیست کتابهایی که میخوام بخونم تو فیدیبو و طاقچه بود تصمیم گرفتم یه روشی رو برای مطالعه کتابها پیدا کنم.
بهترین روش که به ذهنم رسید عکس گرفتن از تک تک صفحهها و تبدیل کردن عکسها به فرمت PDF یا فرمتهای دیگهای که کیندل ساپورت میکنه بود. ولی به دلیل این که داریم عکس میگیریم دیگه آپشنهایی مثل هایلایت کردن رو از دست میدیم، ولی خوب باز بهتر از هیچی بود (البته روشهایی وجود داره برای این که عکس رو میگیرید، خطها رو شناسایی کنه و بعد تبدیل به pdf کنه ولی یکم زحمتش زیادتر بود). فقط برای این که حق ناشر و اینا هم رعایت بشه، کتابهایی که از این روش استفاده میکنید رو فقط خودتون استفاده کنید.
اول رفتم سراغ طاقچه به خاطر این که وب اپلیکیشن داره و کار راحت تره. یعنی میتونستم روی فایرفاکس کتاب رو باز کنم. به صورت کلی کاری که قرار انجام بدیم به این صورتاست، که از صفحات عکس بگیریم و ورق زده بشه. برای این کار از python و پکیج selenium استفاده کردم. که با استفاده از pip میتونید اون را نصب کنید. پس از نصب پکیج برای کار با سلنیوم باید درایور بروزر مورد نظرتون رو نصب کنید. برای این مقاله از فایرفاکس استفاده شد که برای دانلود کردن درایور آن میتونید به اینجا برید.
from selenium import webdriver driver = webdriver.Firefox() driver.set_window_size(500, 800)
با استفاده از کد بالا فایرفاکس رو باز میکنم، خوب بعد از اون به سایت طاقچه میریم و کتابی که خریدیم رو باز میکنیم. اندازه صفحه رو هم با توجه به اندازه دستگاه تنظیم میکنیم که خیلی ریز یا درشت نشه، برای kindle paperwhite اندازه بالا مناسب بود. عکس پایین کتاب ۱۲ قانون زندگی رو میبینید که توی طاقچه باز کردم.
کاری که باید انجام بدیم عکس گرفتن از هر صفحه و رفتن به صفحهی بعد هست.
from selenium import webdriver def screenshot_all_page(name_book): for this_p in range(int(driver.find_element_by_xpath('//*[@id="totalPages"]').text)): driver.save_screenshot(f'/PATH_FILE/{name_book}/{this_p}.png') driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[3]/div[2]/div[1]/i').click() screenshot_all_page('12_ghanon_zendegi')
کد زده شده دارای ۳ تا قسمت هست،اول از همه تعداد صفحات را بدست میاریم که بدونیم حلقه for چقدر باید اجرا بشه، بعد از اون با دستور save_screenshot از صفحه عکس میگیریم و با خط بعدی به صفحه بعد میرویم. این قسمت با توجه به تعداد صفحه کتاب ممکن زمانبر بشه.
برای تبدیل کردن عکسهای گرفته شده با pdf هم میتوان از سایت هایی مثل pdf.online استفاده کرد که فقط نیاز به آپلود کردن همهی عکسها داخل آن است، هم از کد پایین میتوانیم استفاده کنیم. که نیاز به دو پکیج PIL و fpdf دارد.
from fpdf import FPDF from PIL import Image
pdf = FPDF() imagelist=[] total_num_page = int(driver.find_element_by_xpath('//*[@id="totalPages"]').text) for page_num in range(1, total_num_page): image = Image.open(f'/PATH_FILE/12_ghanon_zendegi/{page_num}.png') imagelist.append(image).convert('RGB'))
imagelist[0].save('/PATH_FILE/12_ghanon_zendegi/12_ghanon_zendegi.pdf', save_all=True, append_images=imagelist)
فیدیبو مثل طاقچه دارای وب اپلیکیشن نیست و باید اون رو روی یک گوشی نصب کنیم. برای این کار از Android Emulator استفاده کردم. از برنامه Android studio برای شبیهسازی اندروید استفاده کردم، البته برنامههای سبکتری هم برای این کار است. Android studio رو هم میتونید از اینجا دانلود کنید. بعد از نصب کردن برنامه و اجرا کردن آن به دنبال AVD Manager بگردید که معمولا در سمت راست بالا قرار داره، پس از کلیک کردن یک پنجره باز میشه که میتوانید virtual device بسازید. برای این کار بر روی Create Virtual Device کلیک کنید، بعد از آن صفحهای که باز میشود برای انتخاب دستگاه و مشخصات آن است. بهتر است دستگاهی رو انتخاب کنید که از نظر اندازه نزدیکتر به کیندل باشد، البته میتونید خودتون هم با استفاده New Hardware profile دستگاه کیندل خود را تعریف کنید، بعد از این قسمت نیاز هست اندروید موردنظرتون نصب بشه، برای این کار نیاز هست که فیلترشکن را روشن کنید، بعد از اون آخرین اندروید که هست را نصب کنید. با توجه به سرعت اینترنت این قسمت زمانبر است. بعد از این که تموم شد، دستگاه رو راهاندازی کنید.
در قسمت بعدی نیاز داریم اپلیکیشن فیدیبو رو نصب کنیم. برای این کار فایل apk آن را نیاز داریم که از سایتهای مختلفی میشه دانلود کرد، بعد از دانلود کردن فایل را به فولدر /home/{NAME}/Android/Sdk/platform-tools/ منتقل میکنیم. سپس، با استفاده از کد زیر فیدیبو رو نصب میکنیم.
./adb install Fidibo.apk
خوب اگر همه چی درست انجام شده باشه، الان اپلیکیشن فیدیبو رو باید روی گوشی ببینید. پس از باز کردن آن و وارد شدن به حسابتون، کتابی که میخواهید رو خریداری کرده و وارد آن بشید.
از این جا به بعد مثل قبل باید یک کدی داشته باشیم که اسکرین شات بگیره و به صفحه بعد بره. برای این کار از پکیج pure-python-adb استفاده شد. که از آن برای وصل شدن به گوشی توسط پایتون استفاده میشود.
from ppadb.client import Client class fidibo: def __init__(self, book_name, page_num_total): adb = Client() self.device = adb.devices()[0] self.book_name = book_name self.page_num_total = page_num_total self.path_file = 'PATH_FILE/BOOK/'
def screen_shot(self): for page_num in range(self.page_num_total): image = devices[0].screencap() with open(self.path_file + f'{self.book_name}/{page_num}.png', 'wb') as f: f.write(image) self.device.shell(f'input keyevent 25')
def to_pdf(self): pdf = FPDF() imagelist=[] for page_num in range(self.page_num_total): imagelist.append(Image.open(self.path_file + f'{self.book_name}/{page_num}.png').convert('RGB')) imagelist[0].save(self.path_file + f'{self.book_name}/{self.book_name}.pdf',save_all=True, append_images=imagelist) this_book = fidibo('Radical_market').screen_shot() this_book.to_pdf()
کد بالا از ۲ تا تابع تشکیل شده، یکی برای اسکرین شات گرفتن و رفتن به صفحهی بعد و قسمت دوم آن هم مثل بالا برای تبدیل کردن به PDF میباشد. در تابع اسکرین شات برای رفتن به صفحه بعد از دکمه صدا استفاده شده است که آن را باید در اپلیکیشن فیدیبو فعال کنید (داخل تنظیمات فونت و صفحه دنبال آن بگردید) قبل از اجرا کردن فقط فونت رو تنظیم کنید که خیلی درشت یا ریز نباشد برای خواندن در کیندل.
بعد از تبدیل کردن فایلها به PDF دیگه فقط باید به کیندل منتقل کنید و با خیال راحت کتابتون رو مطالعه کنید.
در این مقاله، روش مطالعه کتابهای فیدیبو و طاقچه روی کیندل رو توضیح دادم، البته اپلیکیشنهای دیگه کتابخوان هم به یکی از دو روش بالا قابل استفاده است. در روش بالا همان طور که توضیح داده شد،کتاب باید خریداری شود و سپس آن را به کیندل منتقل میکنیم که حقوق ناشر را نیز نقص نکرده باشیم، لطفا از این روش فقط استفاده شخصی کنید و کتابها رو پخش نکنید.