Archiv pro štítek: PHP

Ubuntu: Odesílání emailů na localhostu

Ve své podstatě tento článek volně navazuje na můj předchozí text, kde jsem prozradil, jak během vývoje webové aplikace pohodlně přijímat emaily za účelem testování správného chování. Ovšem k tomu, abychom si mohli zprávu přečíst, musí být nejprve odeslána. Velmi jednoduše lze tohoto cíle dosáhnout v Ubuntu po kontaktování služby Gmail. K doručení emailu se použijí servery Google, a to i na localhostu.

Nejprve je nutno nainstalovat pomůcku jménem sSMTP. K tomu slouží tento příkaz:

sudo apt-get install ssmtp

Nyní následuje nezbytné nastavení. Ve svém oblíbeném editoru zobrazte obsah souboru /etc/ssmtp/ssmtp.conf. K uložení změn však pravděpodobně budete potřebovat rootovská práva. Dozajista se proto bude hodit následující:

gksudo gedit /etc/ssmtp/ssmtp.conf

S právy roota dojde k otevření požadovaného umístění v GUI editoru.

Konfigurační soubor obsahuje komentáře, které začínají mřížkou (#). Tyto řádky můžete ignorovat. Cílem je dosáhnout následujícího stavu:

root=jmeno.prijmeni@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=jmeno.prijmeni@gmail.com
UseSTARTTLS=YES
FromLineOverride=YES
AuthUser=jmeno.prijmeni
AuthPass=nejakeTajneHesloKtereNikdoNevi

Ne všechny konfigurační parametry jsou přítomny, a proto se neostýchejte je do souboru připsat.V mém případě šlo o UseSTARTTLS, AuthUser a AuthPass. Když v uvedeném příkladu uvádím jmeno.prijmeni@gmail.com, mám tím na mysli email, který ve službě Gmail používáte. Část jmeno.prijmeni tedy zaměňte za své uživatelské jméno.

Blížíme se do finále, tu náročnější část již máme za sebou. Pro editaci /etc/ssmtprevaliases zadejte:

gksudo gedit /etc/ssmtp/revaliases

Konfigurace vypadá takto:

root:jmeno.prijmeni@gmail.com:smtp.gmail.com:587
uzivatelskeJmeno:jmeno.prijmeni@gmail.com:smtp.gmail.com:587

Je nutno každému linuxovému uživateli jednotlivě povolit používání sSMTP. Vyznačenou část uzivatelskeJmeno tedy nahraďte loginem, kterým se do Ubuntu přihlašujete. Pokud jej neznáte, použijte příkaz who, který vám jej ochotně připomene. Vypíše totiž informace o aktuálně přihlášených účtech. Uživatelské jméno se poté nachází v pomyslné tabulce hned na prvním místě. V mém případě (viz screenshot) se jedná o login ubuntu.

Příkaz who

K otestování správného nastavení poslouží tento příkaz:

sudo ssmtp prijemce@domena.tld

Po napsání své zprávy v terminálu stiskněte Enter a poté CTRL + D. Dojde k odeslání emailu nebo vypsání chybových hlášek.

Použití Google Translate API v PHP

Když se v současné době setkáte s požadavkem na vytvoření aplikace, která bude spoléhat na dostupné služby k překladu textu, zpravidla myšlenky směřují k využití Google Translate nebo Bing Translator. API u Google Translate není zdarma, platíte 20 dolarů za milión přeložených znaků. Bing Translator každý měsíc přeloží bezplatně 2 milióny znaků. Pokud potřebujete více, podívejte se na ceník. I když by mohlo nasazení služby Bing Translator vzhledem k provozním nákladům symbolizovat jasnou volbu, nezapomeňte si nejprve porovnat kvalitu překladu do cílového jazyka.

V mém případě se překlad textu svěřil vyhledávacímu gigantovi Google. I když dokumentace popisuje nasazení API v mnoha programovacích jazycích, nenašel jsem kontaktování služby v PHP s parametry, které jsem požadoval. Dozajista se proto bude hodit, když ukáži, jakým způsobem text překládám.

require_once './google-api-php-client/src/Google_Client.php';
require_once './google-api-php-client/src/contrib/Google_TranslateService.php';

function translate($from, $to, $what)
{
$client = new Google_Client();
$client->setApplicationName('JmenoAplikace');  
$client->setDeveloperKey('123456789');
$service = new Google_TranslateService($client);

$translations = $service->translations->listTranslations($what, $to, array(
                "source" => $from,
                "format" => "html"
));
            
return $translations["translations"][0]["translatedText"];
}

Pro snadnější práci využívám knihovnu pojmenovanou Google API Client Library. Tu stačí stáhnout a rozbalit do zvoleného umístění. Ve zdrojovém kódu následně připojíte soubor Google_Client.php a zvolenou službu, kterou budete používat. Já chci překládat text, a proto se poohlédnu po Google_TranslateService.php ze složky contrib. Nasleduje vložení vývojářského klíče. Ten se dozvíte po přihlášení do Google API Console pod záložkou API Access konkrétního projektu. Zde hledejte část Simple API Access.

Nyní je na čase zavolat metodu, která obstará získání překladu. Já přitom znám původní jazyk i ten překládaný. Nepotřebuji proto, aby se jej Google snažil detekovat, v čemž ostatně u velmi krátkého překladu skládajícího se z jednoho slova ne vždy uspěje. Do parametrů $to a $from se jednoduše vloží ISO zkratka dle standardu 639-1, která má 2 znaky. Dále chci, aby Google přeložil text obsahující i HTML tagy tím způsobem, že je zachová. K tomu stačí specifikovat formát. Dle dokumentace se jako výchozí automaticky nastaví HTML, tento parametr tedy není nutno explicitně uvádět, alespoň ale budete mít představu kam sáhnout, když se rozhodnete chování překladu změnit.

Pokud dojde k chybě, vyhodí se výjimka Google_ServiceException. Já raději počítám i s Google_AuthException, Google_CacheException, Google_Exception a Google_IOException. Dále v případě reálného produkčního nasazení kontroluji, zda skutečně v polích existují příslušné indexy. K podobné opatrnosti mě poprvé donutilo API od Facebooku, kdy odpověď serveru ne vždy odpovídala tomu, co bylo uvedeno v dokumentaci.

Seznam českých podstatných jmen

Seznam podstatných jmenK naplnění podstaty jednoho mého projektu jsem potřeboval získat poněkud specifická data – česká podstatná jména v prvním pádě. Nejprve jsem předpokládal, že podobný seznam musím s pomocí webového vyhledávače nalézt. Bohužel jsem však narážel pouze na nefunkční odkazy. Postupně jsem se proto smiřoval s faktem, že kýžený soupis budu vytvářet na vlastní pěst. Mé myšlenky směřovaly k využití nejrůznějších slovníků používaných pro kontrolu pravopisu a tento nápad mi následně potvrdil i jeden tip, jenž jsem během procházení internetu objevil.

Problémy nečiní ani jiné slovní druhy

K získání seznamu nejprve zamiřte na www.openoffice.cz, kde stáhnete český slovník ve formátu oxt. U souboru následně zaměňte koncovku na zip a použijte libovolný dekomprimační nástroj. Uvnitř archívu čeká několik souborů, z nichž pro nás momentálně nejzajímavější nese označení cs_CZ.dic. Doporučuji se rovněž seznámit s přiloženou licencí. Zmíněný souhrn pochází původně ze slovníku pro ispell a přichází s formátem, jenž umožňuje identifikovat kýžené objekty zájmu. Pro tento účel jsem vytvořil jednoduchý skript v PHP, jenž celý soubor postupně projde a vybere pouze ta slova, o které má daný uživatel skutečně zájem. V mém případě šlo o řádky, jenž za symbolem lomítka (/) obsahovaly buď znak H nebo Z.

$lines = file("./cs_CZ.dic");
$fileName = "podstatna_jmena.txt";
for($i = 0 ; $i < count($lines); $i++)
{
 $currentLine = explode("/", $lines[$i]);
 if( (strpbrk($currentLine[1], "HZ") != false) )
 {
 file_put_contents($fileName, $currentLine[0]."\n", FILE_APPEND);
 }
}

Nejprve jsem celý obsah slovníku s pomocí funkce file proměnil na pole. Následovalo jeho procházení s pomocí klasického iteračního cyklu. Na každý řádek byla aplikována snaha o jeho rozdělení na dvě poloviny díky explode. Pokud funkce strpbrk nalezla kýžený písmenný znak, dovolila provést zápis do druhého pomocného souboru. Po ukončení činnosti scriptu jeho obsah tvořily pouze slovní druhy, o něž skutečně stojíte – zde tedy konkrétně výhradně podstatná jména. Jejich předání dalšímu programu či scriptu následně již nic nezabrání.

Příchozí dotazy:

  • slovník podstatných jmen
  • seznam podstatných jmen
  • seznam českých slov
  • slovník českých slov txt
  • česká podstatná jména
  • databáze českých slov
  • seznam českých podstatných jmen
  • podstatna jmena na b