Amascrap – amazon price scraper

Amazon price scraper - извличане и проследяване на цени
Amascrap е програма тип “web scraper”, която извлича и логва цени от Amazon.co.uk. Програмата е базирана на PHP, HTML, Javascript (jQuery). Вградил съм Traktor на цените, за да имат някаква проследяемост във времето. Скриптовете могат да се използват и като Web-сайт.

Програмата я написах за мен, защото често ми се налага да пазарувам от Amazon.co.uk. Забелязах, че в сайта доста продукти си сменят цените през няколко дни и има значение, дали ще си купиш нещо с 10 паунда по-ниска цена. Все пак съм си българче :). Traktora позволява да следиш, през колко време някой продукт си сменя цената, което си е идеална статистика. Помогна ми да разбера, че някои продукти имат абсолютно точен цикъл на смяна на цената. Особено добре се вижда преди или след празници.
Не съм писал демон за автоматичен ъпдейт, за това цените трябва да се ъпдейтват ръчно. При много продукти и ъпдейт на всички се получава лаг, който няма как да се избегне. Все пак нямам достъп до базата данни на Амазон, нит ползвам API. Чист и класически Web-скрапер с XPath и cURL под PHP.
За GUI използвах PHP Desktop с MSIE (не ме целете с камъни, просто Chrome вдигна много мегабайтите).

Кратък видео урок, как се работи с програмата:

Програмата с сорс-кода може да се изтегли от тук:
Amascrap v.0.04 – Ъпдейт на 13.06.2016. Оправени са проблеми при сваляне на данните през HTTPS.

Guest Blogging Articles – система за гест-статии

Article-X е проста система за писане на статии от гост-потребители. Системата я написах така, че да наподобява малко CMS. Може да се настройва.
Article-X - guest blogging system
Подробности и видео урок как се ползва могат да се намерят тук:
Aricle-X – Guest Blogging System
Фронт-демо на системата тук.

Simple BG TV Player – прост rtmpdump плеар за гледане на BG-телевизии

Програмата я написах една вечер, когато се прецака кабелната в къщи. Използвал съм rtmpdump за прихващане на стриймовете. Плеъра, който излъчва стрийма е Mplayer за Windows – беше най-малкия плеър, който намерих и който може да излъчва поточно rtmp видео. Писал съм го на AutoIt 3, че за такива нужди е възможно най-лекия и бърз вариант.
Към момента може да плейва следните телевизии:

  • BTV
  • NovaTV
  • TV Europa
  • БНТ
  • БНТ HD
  • БНТ 2
  • Kanal 3
  • Sportal

Не, че това са ми любимите телевизии, но тия ми се мернаха, като търсих с какво да попълня списъка.
При стартиране на някоя от телевизиите се отваря допълнителен прозорец, който показва буферирането на стрийма и разни други интересни неща. Прозореца лесно може да се скрие.
Програмата работи под 64bit Win. Тествана е под WinXP. изглежда така:
simple bg tv player - онлайн телевизии
Изтегляне 64bit (в архива е и сорскода): Simple BG TV Player – v.0.8.beta.rar
Изтегляне на 32bit версия: Simple BG TV Player – v.0.8.beta-x86.rar
Старата версия все още е достъпна от тук: v.0.7.rar

Нямам време за постоянни ъпдейти на стриймовете, така че се извинявам на всички, които ми писаха да оправя кода. Току що във v.0.4 от (13.03.2016) оправих всички стриймове. Добавих някои канали – БНТ, БНТ HD, БНТ2, SPortal. Махнах City TV и Алфа. Във v.0.5 оправих объркването на БНТ с БНТ HD. От v.0.5 трябва да са добавени и двете. Във версия 0.6 е променен сървара за BTV.

Важно! 03.01.2017 Във v.0.8.beta е променен напълно кода. Адресите на стриймовете, както и някои настройки на програмата са изнесени във външен ini-файл: settings.ini. Това позволява всеки потребител сам да добавя или премахва телевизии от списъка, без да се налага прекомпилиране от сорс-код. Пък и хората имат различни интереси по отношение на телевизиите, плюс това не всички са програмисти. Кода е лек и кратък, на принципа – “направи го елементарно, но да върши работа”. Beta – това го сложих, защото ini-файла се зарежда релативно и все още нямам отзиви, дали програмата се плейва нормално при потребителите. Ето изглед от ini-файла:
Simple TV Player - настройки
INI-файла позволява да се замени плеъра (примерно с VLC), както и дъмпера (примерн с ffmpeg). Редактира се с най-обикновен текстов редактор.
Ето една статия, която показва възможностите за редакция на settings.ini:
Simple TV Player – трикове с ini-файла

А това е ini-файл с добавена телевизия BNT World: settings_v.8+BNT_Wolrd.ini.zip

ПС: Програмата е публикувана с образователна цел. Можете да я теглите, променяте, публикувате и използвате целия код или части от него. Основната ми цел, беше да се запозная по-добре със онлайн-стриймването и начините на защитата му.
ПС2: Ако искате да гледате български телевизии под Android устройство, погледнете статията ми: Гледане на български телевизии (БНТ, bTV, Nova…) под Android с XMTV Player

За любителите на rtmpdump-инга имам Новогодишен подарък – серия от кратки урочета, които се надявам да доразвия, като запазя простотата и достъпността:
rtmpdump tutorial – урок за начинаещи
———-
Nota bene:
Можете да погледнете и статията Гледане на български ТВ канали с Kodi. Добавил съм кратко видео, което показва стъпките от инсталацията под Windows до гледането на най-гледаните български ТВ-канали. Програмата може да се инсталира на всички популярни устройства и операционни системи, включително Android и Apple.

Windows AutoIt Gestures – управление с жестикулации с мишката

Написах простичка програмка за управление на Windows с мишката. Писана е на AutoIt. Може да се напасне лесно за всякакви команди, като съм оставил възможност за редакция на един ini-файл, който контролира цялата хава.
В момента са добавени 8 базови функции, които се изпълняват от десния бутон на мишката.
Windows Mouse Gestures programming functions

Кратко видео с функционалността може да се види тук:


Целия сорс код на програмата:

#include <Misc.au3>
AutoItSetOption("WinTitleMatchMode", 4)
 
$dll = DllOpen("user32.dll")
$ini = "functions.ini"
$func1 = IniRead($ini,"HotKey","Function1",@WindowsDir&"\system32\calc.exe")
$func2 = IniRead($ini,"HotKey","Function2",@WindowsDir&"\system32\calc.exe")
$func3 = IniRead($ini,"HotKey","Function3",@WindowsDir&"\system32\calc.exe")
$func4 = IniRead($ini,"HotKey","Function4",@WindowsDir&"\system32\calc.exe")
$func5 = IniRead($ini,"Gestures","Function5",@WindowsDir&"\system32\calc.exe")
$func6 = IniRead($ini,"Gestures","Function6",@WindowsDir&"\system32\calc.exe")
$func7 = IniRead($ini,"Gestures","Function7",@WindowsDir&"\system32\calc.exe")
$func8 = IniRead($ini,"Gestures","Function8",@WindowsDir&"\system32\calc.exe")
$funcl1 = IniRead($ini,"Label","Function1",@WindowsDir&"\system32\calc.exe")
$funcl2 = IniRead($ini,"Label","Function2",@WindowsDir&"\system32\calc.exe")
$funcl3 = IniRead($ini,"Label","Function3",@WindowsDir&"\system32\calc.exe")
$funcl4 = IniRead($ini,"Label","Function4",@WindowsDir&"\system32\calc.exe")
$funcl5 = IniRead($ini,"Label","Function5",@WindowsDir&"\system32\calc.exe")
$funcl6 = IniRead($ini,"Label","Function6",@WindowsDir&"\system32\calc.exe")
$funcl7 = IniRead($ini,"Label","Function7",@WindowsDir&"\system32\calc.exe")
$funcl8 = IniRead($ini,"Label","Function8",@WindowsDir&"\system32\calc.exe")
 
While   1
    Sleep ( 500 )
    ToolTip("")
    If _IsPressed("04", $dll) Then ; Moje da se smeni s drug buton na mishkata
        $ori = MouseGetPos()
            SplashImageOn("","gdot.bmp","30","30",$ori[0]-15,$ori[1]-15,1)
        Do
            Sleep(100)
        $cur = MouseGetPos()
        If $ori[0] - $cur[0] > 100 And  $ori[1] - $cur[1] > 100  Then
            ToolTip($funcl1)
        ElseIf $ori[0] - $cur[0] < -100 And  $ori[1] - $cur[1] > 100  Then
            ToolTip($funcl2)
        ElseIf $ori[0] - $cur[0] > 100 And  $ori[1] - $cur[1] < -100  Then
            ToolTip($funcl3)
        ElseIf $ori[0] - $cur[0] < -100 And  $ori[1] - $cur[1] < -100  Then
            ToolTip($funcl4)
        ElseIf $ori[0] - $cur[0] > 50 Then
            ToolTip($funcl5)
        ElseIf $ori[0] - $cur[0] < -50 Then
            ToolTip($funcl6)
        ElseIf $ori[1] - $cur[1] > 50 Then
            ToolTip($funcl7)
        ElseIf $ori[1] - $cur[1] < -50 Then
            ToolTip($funcl8)
        Else
            ToolTip("")
        EndIf
 
        Until Not(_IsPressed("04", $dll));Moje da se smeni s drug buton na mishkata
        $cur = MouseGetPos()
 
    	If WinActive("classname=ExploreWClass") Or WinActive("classname=CabinetWClass") Then
 
        	If $ori[0] - $cur[0] > 100 And  $ori[1] - $cur[1] > 100  Then ; Nagore i naliavo - Back
            	Send($func1)
        	ElseIf $ori[0] - $cur[0] < -100 And  $ori[1] - $cur[1] > 100  Then ; Nagore i nadiasno - Forward
            	Send($func2)
        	ElseIf $ori[0] - $cur[0] > 100 And  $ori[1] - $cur[1] < -100  Then ; Nadolu i nalqwo - Minimize
            	Send($func3)
        	ElseIf $ori[0] - $cur[0] < -100 And  $ori[1] - $cur[1] < -100  Then ; Nadolu i nadiasno - Close
            	Send($func4)
 
			ElseIf $ori[0] - $cur[0] > 50 Then ; Naliavo - My Docu
            	ShellExecute($func5)
        	ElseIf $ori[0] - $cur[0] < -50 Then ; Nadiasno - Disc D:\
            	ShellExecute($func6)
        	ElseIf $ori[1] - $cur[1] > 50 Then ; NAGORE - Calculator
            	ShellExecute($func7)
        	ElseIf $ori[1] - $cur[1] < -50 Then ; NADOLU - Notepad
            	RShellExecute($func8)
			EndIf
		Else
 
			If $ori[0] - $cur[0] > 50 Then ; Naliavo - My Docu
            	Run($func5)
        	ElseIf $ori[0] - $cur[0] < -50 Then ; Nadiasno - Disc D:\
            	Run($func6)
        	ElseIf $ori[1] - $cur[1] > 50 Then ; NAGORE - Calculator
            	Run($func7)
        	ElseIf $ori[1] - $cur[1] < -50 Then ; NADOLU - Notepad
            	Run($func8)
        	Else
            	SplashTextOn("Gestures","No action","250","20","-1","-1",2,"","","")
            	Sleep(500)
            	SplashOff()
        	EndIf
 
		EndIf
 
        SplashOff()
    EndIf
WEnd
DllClose($dll)

За да се промени функционалността на жестикулациите, трябва да се редактира секцията “Gestures” във файла functions.ini:

[HotKey]
Function1 = !{LEFT}
Function2 = !{RIGHT}
Function3 = !{SPACE}N
Function4 = !{F4}
 
[Gestures]
Function5 = explorer.exe C:\
Function6 = explorer.exe D:\
Function7 = calc.exe
Function8 = Notepad.exe
 
[Label]
Function1 = Back
Function2 = Forward
Function3 = Minimize
Function4 = Close Explorer
Function5 = Disk C
Function6 = Disk D
Function7 = Calculator
Function8 = Notepad

Секцията “Hot Key” също може да се редактира. Информация за командите в AutoIt тук:
Затварянето или временната пауза на програмата става от тук: HotKey-help.html
Windows Gestures - Stop or Pause
Изтегляне за 32bit Windows: Windows AutoIt Gestures – 32bit
Изтегляне за 64bit Windows: Windows AutoIt Gestures – 64bit

MS Word search strings – търсене на думи в Word файлове

Проста програмка за търсене на думи в MS Word файлове. Програмата е само за 32-bit Windows. Тествана е само под WinXP, но може би ще работи и под други OS.
Писана само за трнировка. Разполага само с базови възможности. Би могло да и се добавят доста повече опции, като рекурсивно преравяне на директории, търсене на кирилица, търсене с регулярни изрази, запазване на резултата в текстов файл и т.н. Към момента ги няма тия дивотии, но ако ми текне музата някой ден може и да я пооправя. Използвал съм 2 езика за програмиране – AutoIt и Perl. Използвах компилатор-пакетера pp, за да компилирам Perl-файла.

Програмата е с отворен код и ако на някой му се занимава, може да си я пипне. Изглежда така:
MS Word Search
Сорс кода:
AutoIt-файла

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
 
Local $line
 
$Form1 = GUICreate("Search in word files", 621, 473, 192, 124)
$Label2 = GUICtrlCreateLabel("Text to Find", 8, 13, 60, 23)
$Rezult = GUICtrlCreateEdit("", 8, 64, 609, 369)
; GUICtrlSetData(-1, "Edit1")
$String = GUICtrlCreateInput("", 80, 8, 393, 21)
$SelectDir = GUICtrlCreateButton("Select Dir", 8, 32, 65, 25)
$Directory = GUICtrlCreateInput("", 80, 32, 393, 21)
$Search = GUICtrlCreateButton("SEARCH", 480, 8, 137, 49)
$Help = GUICtrlCreateButton("?", 584, 440, 25, 25)
$Label1 = GUICtrlCreateLabel("--==[ Programming by Nedialko Voinigovski ]==--", 8, 448, 444, 17)
GUISetState(@SW_SHOW)
 
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $SelectDir
			_seldir()
		Case $Search
			_search()
		Case $Help
			_help()
	EndSwitch
WEnd
 
 
func _seldir()
	$outfolder = FileSelectFolder("Choose a folder.", "")
	GUICtrlSetData($Directory, $outfolder)
EndFunc
 
func _search()
$command = @comspec & ' /c ws.exe' & ' "' & GUICtrlRead($String) & '"' & ' "' & GUICtrlRead($Directory) & '"'
$cmd = Run($command, @WorkingDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
 
	$line = "Wait ..." & @CRLF
	While 1
		$line &= StdoutRead($cmd)
		If @error <> 0 Then ExitLoop
		Sleep(1000)
		GUICtrlSetData($Rezult, $line)
	WEnd
	$line &= "--------------------------" & @CRLF & "All done!"
	GUICtrlSetData($Rezult, $line)
EndFunc
 
func _help()
	MsgBox(0,"HELP","Програмата е комбинация от езиците за програмиране" &@CRLF& "AutoIt (за графичната част) и Perl (за ровичкането в Word-файловете)." &@CRLF&"Има възможност да се използват PCRE (perl регулярни изрази) за търсене в файловете, но " &@CRLF&"все още липсва добра поддръжка на кирилица."&@CRLF&@CRLF&"За да работи всичко нормално трябва и двете exe-та да са в една директория.")
EndFunc

Perl-файла, който върши съществената работа:

use Win32::OLE;
use Win32::OLE::Enum;
use Cwd 'abs_path';
 
$dir = $ARGV[1]; chdir $dir;
@files = <*.doc *.docx>;
$find = $ARGV[0];
 
 
 
foreach $file (@files) {
	$doc = Win32::OLE -> GetObject(abs_path($file));
	open (FH,">jgfd75w43589azwq210");
 
	$paragraphs = $doc->Paragraphs();
	$enumerate = new Win32::OLE::Enum($paragraphs);
	while(defined($paragraph = $enumerate->Next())){
		$text = $paragraph->{Range}->{Text};
		print FH "$text\n";
	}
	$doc->Close;
	close FH;
 
	open (FH,"<jgfd75w43589azwq210");
	while ($line = <FH>) {
		if($line =~ m/$find/i){
			print "$find\t-->\t$ARGV[1]\\$file\n";
			last;
		}
	}
	close FH;
	unlink("jgfd75w43589azwq210");
}

Пакетите за Perl, които ми бяха необходими за компилирането:

gcc environment - 3.4.5 (mingw-vista special r3)
PAR Packager, version 1.009 (PAR version 1.002)

Компилирането на Perl стана елементарно. Просто написах в промпта:

pp search_in_word.pl

Програмата може да се изтегли от тук: MS Word Search

Ohm Calculator за реотани на електронни цигари на Excel

Проста програмка на Excel за изчисляване на съпротивлението на coil-а за изпарител на електронна цигара.
Най-интересното във файла е, че съм използвал именувани полета, за да създам нещо като база данни от която се извличат данните.
Ohm Calculator Excel - e-cigarette
Файла може да се изтегли от тук: Ohm Calculator – e-cigarette

Калкулатор за пресмятане на течност за електронни цигари

Написах скромен HTML-JavaScript калкулатор за пресмятане на прости рецепти за сокчета (e-juice) за електронни цигари.
Демо на калкулатора.
Изтегляне.