آموزش ساخت اسکریپت دریافت تلفظ کلمات از گوگل ترنسلیت - بخش اول

خب چند وقتی هست که سعی می کنم زبان کار کنم و خب توی تلفظ لغات بشدت مشکل دارم.

امروز با یه سرچ به یه اسکریپت bash رسیدم که توسط یکی از سایت های خوب و فعال در زمینه گنو/لینوکس نوشته شده بود و باعث می شد من بتونم به راحتی تلفظ هر کلمه ای رو در هر کجای سیستمم با یه شورت کد خیلی ساده بشنوم.

اما این اسکریپت مشکلاتی داشت و از اونجایی هم که من به بش آنچنان مسلط نیستم تصمیم گرفتم با کمک از همون اسکریپت با php یه ابزار کامل برای خودم بسازم.

حالا هم تصمیم گرفتم ریز ریز بخش هایی از این اسکریپتو اینجا بزارم و توضیحش بدم از اونجایی هم که مقالات خیلی کمی در مورد php-cli توی وب فارسی نوشته شده گفتم شاید جای خالی آموزش ساخت یه اسکریپت ساده که توی cli قدرت خودشو نشون میده بد نباشه.

خب فکر کنم ۲-۴ قسمت با این اسکریپت در خدمتتون هستم.

فعلا بخش اول رو توی ادامه مطلب می تونید بخونید :) 


خب از اونجاییکه نمی خواییم پروژه رو خیلی پیچیدش کنیم کارمون رو با یه تابع آغار می کنیم.

اما قبل از شروع به نوشتن تابعمون نیاز داریم تا یه سری پیکربندی هایی رو بسازیم من یه آرایه به اسم : config می سازم و داخلش فعلا فقط محل قرار دانلود فایل هام رو قرار می دم :

$config = 
[
    "directory"     => "~/.translate/"
];

خب حالا میریم سراغ تابع : برای اولین کار باید ببینیم چجوری می تونیم متنی که توی سیستم خودم select ( یا هایلایت ) می کنم رو توی اسکریپتم دریافتش کنم. من برای این یک ابزار پیدا کردم به اسم : xsel که می تونید با دستور :

sudo apt install xsel

نصبش کنید و بعد با دستور :

xsel -o

متنی رو که انتخاب می کنید رو ببینید پیشنهاد می کنم چند بار این دستور رو توی پایانه (ترمینال) خودتون تست کنید و حتما man page ش رو مطالعه کنید.

خب برمی گردیم سر کارمون این ابزاری که نوشتیم داخل ترمینال قابل دسترسه حالا چجوری توی فایل php فراخانیش کنیم ؟!

خب جواب این سوال خیلی سادس فقط کافیه از تابع :

shell_exec();

توی php استفاده کنید (اطلاعات بیشتر سایت php.net )

حالا تونستیم اون متن هایلایت شده رو پیدا کنیم الان باید بر اساس این متن بگردیم و توی گوگل ترنسلیت تلفظ اون رو دانلود کنیم.

این هم خیلی راحته فقط کافیه با این ادرس (url) کمی بازی کنیم :

https://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=tw-ob&tl=en&q={$text}&textlen=4

خب از اونجاییکه wget دستور بسیار بسیار قوی و عزیزمون در کنارمونه دیگه من نیومدم از توابع php استفاده کنم و مستقیم یه دستور زدم به wget و اون رو گزاشتم توی تابع shell_exec() تا خودش کار هارو راست و ریست کنه.

نتیجه نهایی من شد این :

$shell = "wget -q -U Mozilla \"https://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=tw-ob&tl=en&q={$text}&textlen=4\" -O {$config["directory"]}{$text}.mp3";
shell_exec($shell);

خب جدای از اینکه الان این wget دقیقا چیکار می کنه ( که می تونید man page ش رو بخونید تا ببینید این چیز ها چیه که نوشتم ) میبینید که اون مسیر (دایرکتوری) که توی متغیر کانفیگ اضافه کردیم رو اینجا استفاده کردیم.

الان اگه من این اسکریپت رو اجرا کنم ( البته هنوز زوده برای اجرا کردن ) صوت تلفظ اون کلمه رو دانلود و توی پوشه ای میریزه و به اسم اون کلمه و با فرمت mp3 ذخیره می کنه . خب حالا می خواهیم نسخه اول این چیزی که نوشتیم رو آزمایش کنیم. من این کدها رو اینجوری سر هم کردم :

function get_voice()
{
    global $config;
    if ( empty(shell_exec('xsel -o')) ) 
    {
        return shell_exec("notify-send -t 5000 'please select text'");  
    }
    if ( empty($config["directory"]) ) 
    {
        return shell_exec("notify-send -t 5000 'please check configure var'");  
    }

    $text = shell_exec('xsel -o');
    $shell = "wget -q -U Mozilla \"https://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=tw-ob&tl=en&q={$text}&textlen=4\" -O {$config["directory"]}{$text}.mp3";
    shell_exec($shell);

}

حالا این تابع آماده آزمایش کردنه. توی قسمت بعدی سعی می کنیم این اسکریپت رو گسترشش بدیم و براش شورت کد تعیین کنیم تا خیلی راحت تر بتونیم ازش استفاده کنیم. در ضمن از اون

notify-send -t 5000 'please select text'

هم نترسید در موردش سرچ کنید :) البته جلسه بعد بیشتر در موردش توضیح میدم. موفق و سلامت باشید در پناه حق :)