Ini read mit list view weis net wie

11/08/2010 19:52 rexfox#1
hey Com^^,

also... habe folgenden gui

[Only registered and activated users can see links. Click Here To Register...]

wenn man auf speichern klickt, wird die geöffnete youtube seite gespeichert.. diese steht immer aktuell in der inputbox unten..

so wenn man speichert, wird das zum einem oben in der liste angeziegt und gleichzeitig in einer ini gespeichert..

diese ini soll beim start des programms immer wieder eingelesen werden und die gespeicherten in die liste schreibn... jetzt ist mein problem..^^ ich weis net genau wie, weil des ja mehrere einlesen soll..

bei fragen ,was variablen oder so bedeuten ruhig fragen :D
mein (falscher) ansatz:
PHP Code:


if FileExists("Seiten.ini"Then
Do

    
GUICtrlCreateListViewItem(IniRead("Seiten","YouTube-Seiten",$savedsites,"0")&IniRead("Seiten","YouTube-Namen",$savednames,"0"),$List1)
    
$bla=$bla+1

Until $bla
=$savednames Or $bla=$savedsites
EndIf 

hier nochmal ein bild von ini und liste:
[Only registered and activated users can see links. Click Here To Register...]
11/08/2010 22:30 mipez#2
Code:
If NOT FileExists("Seiten.ini") Then
IniWrite("Seiten.ini","","","")
Else
$read = IniReadSection("Seiten.ini","Youtube Seiten")
If $read[0][0] = 0 Then
$read2 = GUICtrlRead($Input)
$write1 = _GUICtrlListView_AddItem($ListView,$read2)
IniWrite("Seiten.ini","Youtube Seiten",$write1,$read2)
Else
For $i = $read[0][0] -1 To 0 Step -1
$write2 = _GUICtrlListView_AddItem($ListView,$read[$i+1][1])
IniWrite("Seiten.ini","Youtube Seiten",$write2,$read2)
Next
EndIf
EndIf
Input auslesen und in ListView + Ini speichern... kA obs klappt xD
Mitm bissl umändern müsste das auch dein 2. Anliegen lösen.
11/09/2010 14:51 rexfox#3
ich poste mal ganzen code vllt seht ihr dann mein prob^^

ist aber noch net fertig.. und die includes sind vllt manchmal unsinnig :D
PHP Code:
#Include <Date.au3>
#Include <Misc.au3>
#include <IE.au3>
#Include <String.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#Include <GuiListView.au3>
#include <INet.au3>


#EndRegion ### END Koda GUI section ###
$Form1 GUICreate("Wiederholer"626474189121)
GUISetFont(84000"Comic Sans MS")
GUISetBkColor(0x0000FF)
$List1 GUICtrlCreateListView("Gespeicherte",1656593231,-1,$LVS_EX_CHECKBOXES)
GUICtrlSetColor(-10x000000)
$Iwh GUICtrlCreateInput(""23230416923)
GUICtrlSetColor(-10x000000)
$Label1 GUICtrlCreateLabel("Wiederholungen:"2429620836)
GUICtrlSetFont(-1204000"MS Sans Serif")
$Iseite GUICtrlCreateInput(""20840840123)
GUICtrlSetColor(-10x000000)
$Label2 GUICtrlCreateLabel("Webseite zum Speichern:"1640818524)
GUICtrlSetFont(-1134000"MS Sans Serif")
$Bsave GUICtrlCreateButton("Speichern"2433611349$WS_GROUP)
GUICtrlSetColor(-10x000000)
$Bplay GUICtrlCreateButton("Play"46433612149$WS_GROUP)
GUICtrlSetColor(-10x000000)
$Label3 GUICtrlCreateLabel("Wiederholer"224815236)
GUICtrlSetFont(-1204000"MS Sans Serif")
$Label4 GUICtrlCreateLabel("Videozeit:"416165619)
GUICtrlSetColor(-10x000000)
$lzeit GUICtrlCreateLabel("blabla"468163419)

GUICtrlSetColor(-10x000000)
$Checkbox1 GUICtrlCreateCheckbox("Webseite manuell einfügen"45644016917)
GUICtrlSetColor(-10x000000)
$Label5 GUICtrlCreateLabel("Liedname:"164407824)
GUICtrlSetFont(-1134000"MS Sans Serif")
$Iname GUICtrlCreateInput(""10444034523)
GUICtrlSetColor(-10x000000)
$Checkbox2 GUICtrlCreateCheckbox("Internet öffnen"45645614517)
GUICtrlSetColor(-10x000000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


;$blub=


$bla=IniRead("Seiten","Anzahl","zahlnamen","0")
$i2=0
$i
=0
$dll 
DllOpen("user32.dll")
$anzahl=0
if FileExists("Seiten.ini"Then
    $savedsites
=IniRead("Seiten","Anzahl","zahlseiten","0")
$bla=IniRead("Seiten","Anzahl","zahlnamen","0")
Else
    
$savedsites=1
$bla
=0
EndIf

if 
FileExists("Seiten.ini"Then
    $savednames
=IniRead("Seiten","Anzahl","zahlnamen","0")
Else
    
$savednames=1
EndIf

if 
FileExists("Seiten.ini"Then
For $i2=IniRead("Seiten","Anzahl","zahlseiten","0")-1 to 0 Step -1
$bla
=$bla-1
    GUICtrlCreateListViewItem
(IniRead("Seiten","YouTube-Seiten",$bla,"0")&IniRead("Seiten","YouTube-Namen",$bla,"0"),$List1)


Next
EndIf


While(
1)
    
settime()
    
setedit()
    
$nMsg GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$Bsave
            save
()
        Case 
$Bplay
            play
()


    EndSwitch
$wiederholungen=GUICtrlRead($Iwh)


WEnd
Func setedit
()
    If 
GUICtrlRead($Checkbox1)=$GUI_CHECKED Then

    
Else
    
$oForm=_IEAttach("YouTube")

    
$sHTML _IEDocReadHTML ($oForm)

GUICtrlSetData($Iseite,_IEPropertyGet $oForm,"locationurl" ))

    
GUICtrlSetData($Iname,_IEPropertyGet $oForm,"title" ))


    EndIf
EndFunc
Func start
()
If 
$wiederholungen="unendlich" Then
startun
()
Else

WinActivate("YouTube")
WinWaitActive("YouTube")
Do
Sleep(100)
Until _IsPressed(01,$dll)

Do
$oForm=_IEAttach("YouTube")
$sHTML _IEDocReadHTML ($oForm)
$videotime _stringbetween($sHTML,'"length_seconds":',',')

$videotime1=$videotime[0]
ToolTip("Dauer in Sekunden:"&$videotime1,0,0)
Sleep($videotime1*1000+3000)

ControlClick("YouTube","","MacromediaFlashPlayerActiveX1","left",18859)

$i=$i+1
Until $i
=$wiederholungen


EndIf
EndFunc

Func startun
()
WinActivate("YouTube")
WinWaitActive("YouTube")
Do
Sleep(100)
Until _IsPressed(01,$dll)

While(
1)
$oForm=_IEAttach("YouTube")
$sHTML _IEDocReadHTML ($oForm)
$videotime _stringbetween($sHTML,'"length_seconds":',',')

$videotime1=$videotime[0]
ToolTip("Dauer in Sekunden:"&$videotime1,0,0)
Sleep($videotime1*1000+3000)

ControlClick("YouTube","","MacromediaFlashPlayerActiveX1","left",18859)


WEnd
EndFunc

Func settime
()
If 
WinExists("YouTube"Then
Global $iHours,  $iMins$iSecs
$oForm
=_IEAttach("YouTube")
_IELoadWait($oForm)
$sHTML _IEDocReadHTML ($oForm)
$videotime _stringbetween($sHTML,'"length_seconds":',',')


GUICtrlSetData($lzeit,$videotime[0])

;
GUICtrlSetData($lzeit,$videotime[0],0)
EndIf
EndFunc

Func play
()
start()
EndFunc

Func save
()

$seitenname=GUICtrlRead($Iseite)
$liedname=GUICtrlRead($Iname)
IniWrite("Seiten","YouTube-Seiten",$savedsites,$seitenname)
IniWrite("Seiten","Youtube-Namen",$savednames,$liedname)

sleep(500)
GUICtrlCreateListViewItem(IniRead("Seiten","YouTube-Seiten",$savedsites,"0")&IniRead("Seiten","YouTube-Namen",$savednames,"0"),$List1)

$savednames=$savednames+1
$savedsites
=$savedsites+1
IniWrite
("Seiten","Anzahl","zahlseiten",$savedsites)
IniWrite("Seiten","Anzahl","zahlnamen",$savednames)

EndFunc 
11/09/2010 15:34 lolkop#4
also da bei dem tool leider nichts funktioniert (bei mir zumindest), wäre es nicht schlecht mal so zu wissen, was es denn eigentlich machen sollte =)
11/09/2010 15:40 rexfox#5
okay sry^^

joa ne freundin hört immer musik von youtube.. sie lädt sich keine runter oder so.. dann hab ich mal vor langer zeit einen bot gemacht, der des video X mal (konnte nam eingebn) wiederholt..
jetzt hab ich mri gedacht mach ich des mal größer und noch mit ner speicher option.. und nem netten gui

funzt nur wenn internet explorer mit einem youtube vid geöffnet ist also dann zeigts was an^^ und speichern geht aber laden net
11/09/2010 15:48 lolkop#6
muss das ganze deinn im offenen internet explorer laufen?

wenn es nur für musik ist, würde ich dir ja empfehlen, das ganze unsichtbar im hintergrund laufen zu lassen. bzw falls video auch sichtbar sein soll, halt das video mit in dem fenster anzeigen lassen.

für das auflisten der videos, würde ich dir empfehlen nur immer die youtube titel anzeigen zu lassen.
das ganze kannst du denn immernoch schön in einer ini bzw einem beliebigen anderen dokument speichern.
11/09/2010 16:00 rexfox#7
also.. der internet explorer ist bisher offen.. ja also der user benutzt den "bot" und hat gleichzeitig den internet explorer offen^^ aber den gui könnte ich verstecken^^.. wie des anzeigen im autoit geht weis ich net^^ aber ist auch net das problem weis wie gesagt net, wie ich das laden machen soll....^^
11/09/2010 16:39 lolkop#8
hier mal ein kleines beispiel, wie du das video zb abspielen könntest:
Code:
#include <ie.au3>

dim $size[2] = [600, 500]

$ie = _IECreateEmbedded()
GUICreate('Video', $size[0], $size[1])
GUICtrlCreateObj($ie, -12, -17, @DesktopWidth, @DesktopHeight)
GUISetState()
_IENavigate ($ie, 'about:blank')

_IEBodyWriteHTML($ie, BuildBody('UiMvISjPVC0', $size[0], $size[1]))

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
	EndSwitch
WEnd

Func BuildBody($video, $width, $height)
	Return '<object width= "'&$width&'" height="'&$height&'"><param name="movie" value="http://www.youtube.com/v/'&$video&'&autoplay=1&rel=0&fs=1&color1=0x3a3a3a&color2=0x999999&border=0&loop=0"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/'&$video&'&autoplay=1&rel=0&fs=1&color1=0x3a3a3a&color2=0x999999&border=0&loop=0" type="application/x-shockwave-flash" allowfullscreen="true" width="'&$width&'" height="'&$height&'"></embed></object>'
EndFunc
habe mal einfach den embed code genommen (bin kein html kenner könnte sein das es besser geht :P)

einfach bei bodybuild vorne die video id rein =)
mit der size variable oben kannst du die größe wählen, die anzeigt werden soll =)
11/09/2010 17:06 rexfox#9
okay^^ thx...^^ sehr nett
aber löst net mein prob.. werds aber trotzdem einbauen später muss jetzt weg :D

video id = url oder?
11/09/2010 17:53 lolkop#10
Quote:
Originally Posted by rexfox View Post
video id = url oder?
sieht "UiMvISjPVC0" aus wie ne url? :P

das andere gui würde ich seperat bauen. wobei das ja nun wirklich einfach ist.
du erstellst dir ne einfache list, und fügst 3 buttons ein zum hinzufügen, löschen, abspielen.

in der liste stehn nur die video namen.
in der ini speicherst du denn immer name=id

wenn auf play gedrückt wird, einfach IniReadSection und gucken, welche id der name hat, und ihn dann abspielen =)

Edit:
hier nochmal wie ich das wohl aufbauen würde:
Code:
#include <ie.au3>
Dim $size[2] = [600, 500]

;gui erstellen
$main = GUICreate('YoutubeTool', 271, 230)
$list = GUICtrlCreateList('', 10, 10, 250, 200)
$add = GUICtrlCreateButton('Add', 10, 200, 55, 20)
$del = GUICtrlCreateButton('Delete', 75, 200, 55, 20)
$go = GUICtrlCreateButton('Play', 140, 200, 55, 20)
$state = GUICtrlCreateButton('Show', 205, 200, 55, 20)
GUISetState()

;ini einlesen und liste füllen
$section = IniReadSection('youtube.ini', 'sites')
For $i=1 To $section[0][0]
	GUICtrlSetData($list, $section[$i][0])
Next

;gui für videos erstellen
$ie = _IECreateEmbedded()
$video = GUICreate('Video', $size[0], $size[1], -1, -1, -1, -1, $main)
GUICtrlCreateObj($ie, -12, -17, @DesktopWidth, @DesktopHeight)
_IENavigate ($ie, 'about:blank')

While 1
	$msg = GUIGetMsg(1)
	Switch $msg[0]
		Case -3
			If $msg[1] = $video Then
				GUISetState(@SW_HIDE, $video)
			Else
				Exit
			EndIf
		Case $add
			$input = InputBox('Info', 'Enter the Youtube URL here:', 'http://www.youtube.com/watch?v=JVPu-BX0bo4')
			;eingegebene url parsen lassen... track-name/id speichern
			$data = StringRegExp(BinaryToString(InetRead($input)), '<title>(?s).*?- (.*?)</title>(?s).*?<link rel="canonical" href="/watch\?v=(.*?)">', 1)
			If Not IsArray($data) Then
				MsgBox(0, 'Error', 'This is not a valid Youtube page')
			Else
				;in ini und liste aufnehmen
				IniWrite('youtube.ini', 'sites', StringReplace(StringTrimRight($data[0],3), '&', '&'), $data[1])
				GUICtrlSetData($list, StringReplace(StringTrimRight($data[0],3), '&', '&'))
			EndIf
		Case $del
			;markiertes aus ini löschen und liste mithilfe von ini updaten
			IniDelete('youtube.ini', 'sites', GUICtrlRead($list))
			GUICtrlSetData($list, '')
			$section = IniReadSection('youtube.ini', 'sites')
			For $i=1 To $section[0][0]
				GUICtrlSetData($list, $section[$i][0])
			Next
		Case $go
			If GUICtrlRead($go) = 'Play' Then
				$section = IniReadSection('youtube.ini', 'sites')
				For $i=1 To $section[0][0]
					If $section[$i][0] = GUICtrlRead($list) Then
						_IEBodyWriteHTML($ie, BuildBody($section[$i][1], $size[0], $size[1]))
						GUICtrlSetData($go, 'Stop')
						ExitLoop
					EndIf
				Next
			Else
				GUISetState(@SW_HIDE, $video)
				_IENavigate($ie, 'about:blank')
				GUICtrlSetData($go, 'Play')
			EndIf
		Case $state
			If GUICtrlRead($state) = 'Show' Then
				GUISetState(@SW_SHOW, $video)
				GUICtrlSetData($state, 'Hide')
			Else
				GUISetState(@SW_HIDE, $video)
				GUICtrlSetData($state, 'Show')
			EndIf
		Case Else
			If GUICtrlRead($state)='Hide' And Not BitAND(WinGetState($video),2) Then GUICtrlSetData($state, 'Show')
	EndSwitch
WEnd

Func BuildBody($video, $width, $height, $loop=1)
	Return '<embed src="http://www.youtube.com/v/'&$video&'&autoplay=1&rel=0&fs=1&color1=0x3a3a3a&color2=0x999999&border=0&loop='&$loop&'" type="application/x-shockwave-flash" allowfullscreen="true" width="'&$width&'" height="'&$height&'"></embed>'
EndFunc
11/09/2010 20:27 rexfox#11
ahh okay jetzt weis ich^^ und sry.. aber werde deinen script net verwenden...^^


habe aber den teil, den ich brauch kopiert und geändert:

Quote:
;ini einlesen und liste füllen
$section = IniReadSection('youtube.ini', 'sites')
For $i=1 To $section[0][0]
GUICtrlSetData($list, $section[$i][0])
Next

und meins ist:
PHP Code:
if FileExists("Seiten.ini"Then
$section 
IniReadSection('Seiten.ini''YouTube-Seiten')
For 
$i=1 To $section[0][0]
    
GUICtrlSetData($List1$section[$i][0])
Next 



aber es passiert nix.. wird nix angezeigt... kp why werde jetzt mal grad alles durchgucken genau aber pls vllt seht ihr ja en fehler :D
11/09/2010 20:33 lolkop#12
sagte ja nicht du sollst es nehmen :P

du hast da dir ein extrem komisches umständliches system für deine ini arbeiten ausgedacht. wenn du das so verwenden willst, wird das wohl recht kompliziert...

deswegen wollte ich dir mal vorstellen, wie ich das ganze aufbaun würde.
11/09/2010 20:48 mipez#13
Quote:
Originally Posted by lolkop View Post
sagte ja nicht du sollst es nehmen :P

du hast da dir ein extrem komisches umständliches system für deine ini arbeiten ausgedacht. wenn du das so verwenden willst, wird das wohl recht kompliziert...

deswegen wollte ich dir mal vorstellen, wie ich das ganze aufbaun würde.
Ich hab das ganze in nem anderen Script über ne Checkbox gelöst...
Code:
Func _search($page,$key)
	$split = StringReplace($key," ","+")
	$read = InetRead("http://m.youtube.com/results?gl=DE&client=mv-google&hl=de&search=by_search&uploaded=&q="&$split&"&p="&$page)
	$get = BinaryToString($read)
	$string = StringRegExp($get,'<a accesskey="(.+)" href="/watch[?]gl=DE&client=mv-google&hl=de&(.+)">(.+)</a>',3)
	;$string2 = StringRegExp($get,'<a href="/watch[?]gl=DE&client=mv-google&hl=de&(.+)">(.+)</a>',3)
	Local $array[10]
	Local $tstring[9]
	For $i = 2 to UBound($string) Step 3
		$tstring[($i-2)/3] = $string[$i]
	Next
	;_ArrayDisplay($string)
	For $i = 1 To UBound($string)-1 Step 3
		If $i <> 1 Then
			$zop = ($i - 1) / 3
		Else
			$zop = $i - 1
		EndIf
		$array[$zop] = $string[$i]
	Next
	For $i = 0 To 8
		GUICtrlSetData($hListBox,$tstring[$i])
	Next
	$array[9] = $split
	If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then
		For $i = 0 To 8
			IniWrite("Search.ini","Last - Link",$i,$array[$i])
			IniWrite("Search.ini","Last - Vid",$i,$tstring[$i])
		Next
		IniWrite("Search.ini","Last - Keyword","Keyword",$array[9])
	;ElseIf GUICtrlRead($Checkbox2) = $GUI_CHECKED Then
	;	For $i = 0 To 8
	;		IniWrite("Search.ini","All - Link",$i,$array[$i])
	;		IniWrite("Search.ini","All - Vid",$i,$tstring[$i])
	;	Next
	;	IniWrite("Search.ini","All - Keywords",$array[9],$array[9])
	EndIf
	;GUICtrlSetData($List1,$string2[3])
	;_ArrayDisplay($string)
	;_ArrayDisplay($string2)
	;_ArrayDisplay($array)
	
	Return $array
		
EndFunc
Ist noch nich fertig... $page steht für die Ergebnisseite der YT-Suche, $key für die Suchwörter zB. "hallo welt"

Die Ini sähe dann so aus:
Code:
[Last - Link]
0=v=jZPiPyTeJ3g
1=v=-dqIdxmUkVU
2=v=sKQDDa7YFnA
3=v=Vz64E2y0_UI
4=v=mxEnrpxtiFQ
5=v=ROSdj4Ee-Sw
6=v=xJkaKAIl_Fc
7=v=_YCacWRglEk
8=v=nUip7j99x-Q
[Last - Vid]
0=Warren Suicide- Signal
1=Ciara vs Culcha Candela - Gimmie Dat BASS (DJCK vs Tocadisco's Move It Mix ...
2=Chinese Guy DRIVING FAIL!
3=Chris Tomlin - Jesus Messiah - LIVE @ SPIRIT 105.3 FM
4=Minecraft: zOmg its Minecraft! Ep.1 (MC Gameplay/Commentary)
5=The Beatles Rock Band Video Review
6=MEET KATIE
7=Modern Warfare 2 Multiplayer Gameplay Uncut: Flag Runner (Official HD)
8=[Eng] Hi baby ep 12 (1/5)
[Last]
Keyword=hello+world
11/09/2010 21:03 rexfox#14
uff naja .. leude ich bin (noch) ein ziemlicher autoit bob :D also biite sagt mir mehr^^ und weil ich lernen will bitte eher keine codes oder nur kleine... wills selbst lernen^^ und kein zusammengewürfeltes script aus euren machen ^^
sry dafür :D
aber trotzdem großen respekt und dank wieviel zeit ihr euch nehmt , werde jetzt erstmal thx raushaun :D
11/09/2010 21:15 lolkop#15
versteh nich warum das immer alle so kompliziert über irgendwelche extrem aufwändigen ini systeme machen...

ich mein, man kanns natürlich so machen:
Code:
[name]
nummer=name
[id]
nummer=id
[gesamt]
gesamt=nummer
und denn alles über eine for-schleife von 1 bis nummer einlesen...

Code:
[video]
name=id
ist aber meiner meinung nach halt deutlich einfacher...
und kann auch einfach per inireadsektion komplett ohne irgendwelche schleifen eingelesen werden.