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


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

اگه بخوام خلاصه ای از قسمت قبل بگم :

توی قسمت قبل یه متغیر به اسم $config ساختیم و توش مسیری که می خواییم فایل هامون ذخیره بشه رو وارد کردیم. و همچنین یه تابع ساختیم که متن انتخاب(select) شده رو از کاربر می گرفت و تلفظ اون رو از گوگل دریافت و توی مسیر مورد نظر با اسم همون کلمه یا متن و با پسوند .mp3 دانلود می کرد.

حالا این قسمت می خواهیم :

  • اون فایل دانلود شده رو به صورت اتوماتیک پخش کنیم.
  • بررسی کنیم که اگه صوت قبلا دانلود شده بود دیگه دوباره اینترنت و وقت هدر نره برای دانلود شدنش.

خب بریم ادامه مطلب برای ادامه کار




خب اول یم نکته ای رو درمورد ۲تا از دستوراتی که جلسه قبل استفاده کردیم ولی توضیحی در موردشون ندادیم.

  • در مورد notify-send -t 5000 'please select text' این دستور شل اسکریپت که توی تابع shell_exec استفاده کردیم برای ارسال اعلان(نوتیفیکیشن) استفاده میشه که من اینجا برای ارسال خطا ها استفاده کردم که توی ۲ جا از این کد استفاده شده که بررسی کردیم اگه متغیر ها خالی بودن برنامه رو از کار خارج کنه و این پیغام رو نمایش بده.
  • در مورد wget هم که اطلاع دارید دیگه :) یه ابزار فوق العاده‌س توی گنو/لینوکس پیشنهاد می کنم حتما باهاش آشنا بشید :)

خب اما بریم سر وقت مدیریت حجم اینترنت خودمون.

اول با تابع file_exists توی php آشنا بشیم این تابع بررسی می کنه که فایل ما وجود داره یا خیر. ما ازش اینجوری استفاده می کنیم :

if (file_exists($config['directory'].$text.'.mp3') === true) 

اینجا بررسی می کنیم ببینیم که آیا قبلا این کلمه رو ما دانلود کردیم یا خیر حالا می گیم اگه دانلود شده بود پخشش کن : اول ابزار mpv رو نصب می کنیم :

sudo apt install mpv

بعد خیلی راحت به فایلمون می گیم که اجرا شو:

shell_exec("mpv ".$config['directory'].$text.'.mp3');

و در آخر هم برای اینکه افاضه فیضی از جانب php بهمون برسه یه true هم برگشت می دیم :

return true;

*نکته : من توی متغیر $config اشتباهی رو مرتکب شده بودم اونم این بود که مسیر رو به صورت :

~/.translate/

قرار داده بودم اما برای اینکه بتونیم با php چک کنیم فایلی توی مسیر وجود داره یا نه باید از / شروع کنیم :

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

خب در آخر من تابع رو به صورت زیر برای این مرحله ویرایش کردم :

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');
    if (file_exists($config['directory'].$text.'.mp3') === true) 
    {
        shell_exec("mpv ".$config['directory'].$text.'.mp3');
        return true;
    }
    else
    {
        $shell = "wget -q -U Mozilla \"https://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=tw-ob&tl={$config['from_lang']}&q={$text}&textlen=4\" -O {$config["directory"]}{$text}.mp3";
        shell_exec($shell);
        shell_exec("mpv ".$config['directory'].$text.'.mp3');
        return true;
    }

منتظر بخش بعدی باشید