Link Liste zum selber bauen

14/02/2010

Ich war mit der Link-Liste hier noch nie wirklich zufrieden und da ich mit delicious&Co nie wirklich warm geworden bin und meine Links lieber selber horte, habe ich die letzte schlaflose Nacht zu genutzt mit eine kleine Webseite zu basteln, die via xhttp-request (Ajax) eine Text-Datei nachlädt, und die darin enthaltene Link-Liste in schnell durchsuchbare Tabelle umbaut. Und weil sich so eine tab-separierte Liste ja nicht von alleine erstellt, habe ich mir auch noch ein AppleScript gebaut, welches zunächst checkt, in welcher Anwendung ich bin, ggf. gleich die URL der akutellen Seite kopiert, mich noch nach einer Beschreibung und Tags fragt und das ganze mit einem Datumsstempel in eine Text-Datei schreibt =)
So kann ich meine Link-Liste lokal über einen Shortcut pflegen und via Crontab dann regelmäßig auf die Seite hier laden =) Yahooo! Von hinten durch die Brust ins Auge =)!
Der Clou ist halt, dass die Liste unter allen Browsern die ich so einsetze abrufbar ist und das auch, wenn ich mal gerade kein Internet habe... hm, dann machen die Links an sich auch keinen Sinn in dem Moment. SoWhat! Hier also eine Lokale Version der HTML-Link-Liste und das AppleScript zum Speichern (geht davon aus, das beide Datein in ~/Documents liegen) DOWNLOAD
Link Lister v0.1 v.
10.61 KB (139 hits)

No Comments

Adressen im Adressbuch überprüfen mit Postleitzahlen-Seite

6/12/2009
Das Skript erhebt zwar nicht den Anspruch fehlerfrei zu sein, zeigt aber schön wie man mit Hilfe von Javascript und Safari arbeiten kann... insbesondere page_loaded Routine kann manchmal recht praktisch sein...? Mit dem Skript kann man eine im Adresse-Buch ausgewählte Adresse mit Hilfe der Postleitzahlen-Seite der Post überprüfen. Stimmt der Ortsname, stimmt der Strassenname...
Code zum markieren einmal anklicken

global thewindow

tell application "Address Book"

set ts to selection

if ts ≠ {} then

repeat with t in the ts

if (count of addresses of t) = 0 then

error "Da gib es doch gar keine Anschrift zu prüfen..."

else

repeat with i from 1 to count of addresses of t

set myzip to zip of address i of t

set mystreet to street of address i of t

set mycity to city of address i of t

if ((my search_plz(myzip, "")) = false) then

tell application "Safari" to close tab 1 of window 1

repeat with i from 2 to count of every character of mystreet

set streetslice to (characters 1 through i of mystreet) as text

if ((my search_plz(myzip, streetslice)) = false) then

tell application "Safari" to close tab 1 of window 1

else

exit repeat

end if

end repeat

end if

set ca to name of t & return & formatted address of address 1 of t

set h to my get_search_results()

repeat until my get_weitere_link() = ""

if my get_weitere_link() ≠ "" then

my loadURL(my get_weitere_link())

my page_loaded(20)

set tmp to my get_search_results()

set item 1 of h to item 1 of h & item 1 of tmp

set item 2 of h to item 2 of h & item 2 of tmp

-- h = liste aus liste der Orte + liste der Strassen

end if

end repeat

set allok to true

if item 1 of h does not contain mycity then

set allok to false

display dialog "Der Ort " & mycity & " passt nicht zur PLZ " & myzip

end if

set foundit to false

repeat with i from 1 to count of every item of (item 2 of h)

if mystreet contains (item i of (item 2 of h)) then

set foundit to true

exit repeat

end if

end repeat

if foundit = false then

set allok to false

display dialog "Der Strassenname " & mystreet & " stimmt nicht...."

set the clipboard to (choose from list (item 2 of h) with prompt "Wähle einen korrekten Strassennamen aus, der landet dann in der Zwischenablage... kannst den Rest dann selber machen ;-)") as text

end if

if allok = true then

display dialog "Supi, war alles ok bei" & return & return & ca

else

display dialog "Hm, die Adresse musst du wohl mal korrigieren" & return & return & ca

tell application "Safari" to close tab 1 of window 1

end if

end repeat

end if

end repeat

end if

end tell




on search_plz(theplz, thestreet)

tell application "Safari"

(**do JavaScript "window.location.href = \"http://www.postdirekt.de/plzserver/PlzSearchServlet?id=streetsearch&source=12&plz=" & theplz & "&city=&district=&box=&street=&no=&kgs=&lang=de_DE&checked=5EDDB487F8FE81980113A474DCA88486EADD5B1E&pagenumber=1\""**)

set thewindow to open location "http://www.postdirekt.de/plzserver/PlzSearchServlet?id=streetsearch&source=12&plz=" & theplz & "&city=&district=&box=&street=" & thestreet & "&no=&kgs=&lang=de_DE&checked=5EDDB487F8FE81980113A474DCA88486EADD5B1E&pagenumber=1\""

my page_loaded(20)

if text of document 1 contains "Es wurden zu viele Suchergebnisse gefunden" then

return false

else

return true

end if

end tell

end search_plz


on loadURL(TheURL)

tell application "Safari"

tell document 1

do JavaScript "window.location.href = \"" & TheURL & "\""

end tell

end tell

end loadURL



on get_weitere_link()

tell application "Safari"

tell document 1

set weiter_link to do JavaScript "


if (document.getElementsByClassName('pagebutton').length>1)

{

var w = document.getElementsByClassName('pagebutton')[1].href;

}else{

if (document.getElementsByClassName('pagebutton').length>0)

{

if (document.getElementsByClassName('pagebutton')[0].text.indexOf('Weitere')>-1)

var w = document.getElementsByClassName('pagebutton')[0].href;

else

var w = '';

}else{

var w= '';

}

}

 w;

"

return weiter_link

end tell

end tell

end get_weitere_link

on get_search_results()

tell application "Safari"

tell document 1

set Tabellen_inhalt to do JavaScript "

function Trim(str){

return str.replace(/(^\\s*)|(\\s*$)/g, '');

}

try{

var orte = new Array();

var strassen = new Array();

Array.prototype.contains = function (element) {

for (var i = 0; i < this.length; i++) {

if (this[i] == element) {

return true;

}

}

return false;

}

if (document.getElementById('result_table').rows[0].innerHTML.indexOf('Zustellart')==-1){

if (document.getElementById('result_table').rows.length>2)

{


var strasse_cells_index = 0;

for (var k=0;k<document.getElementById('result_table').rows[0].cells.length;k++)

{

if (document.getElementById('result_table').rows[0].cells[k].innerHTML == 'Straße')

{

strasse_cells_index = k;

break;

}

}

for (var i=1;i<(document.getElementById('result_table').rows.length)-1;i++)

{

if (strasse_cells_index == 0)

{

var plz = Trim(document.getElementById('result_table').rows[i].cells[0].getElementsByTagName('div')[1].innerHTML.replace(/\\&nbsp;/g,''));

var ort = Trim(document.getElementById('result_table').rows[i].cells[1].innerHTML.replace('  ','').replace(/\\&nbsp;/g,'').replace(/\\n/g,''));

var strasse = '';

}else

{

var plz = Trim(document.getElementById('result_table').rows[i].cells[0].getElementsByTagName('div')[1].innerHTML.replace(/\\&nbsp;/g,''));

var ort = Trim(document.getElementById('result_table').rows[i].cells[1].innerHTML.replace('  ','').replace(/\\&nbsp;/g,'').replace(/\\n/g,''));

var strasse = document.getElementById('result_table').rows[i].cells[strasse_cells_index].innerHTML.replace(/\\n/g,'');

strasse = Trim(strasse.slice(0,strasse.indexOf(String.fromCharCode(160))).replace(/\\&nbsp;/g,''))

}

if (orte.contains(ort))

{

}else{

orte.push(ort);

}

if (strassen.contains(strasse))

{

}else{

strassen.push(strasse);

}


}

}

}

var myoutput = [orte,strassen]

myoutput

}catch(e)

{

alert (e)

}

"

end tell

end tell

return Tabellen_inhalt as list

end get_search_results



on page_loaded(timeout_value) -- in seconds

delay 1

repeat with i from 1 to timeout_value

tell application "Safari"

if name of current tab of window 1 is not "Loading" then exit repeat

end tell

delay 1

end repeat

if i is timeout_value then return false

tell application "Safari"

repeat until (do JavaScript "document.readyState" in document 1) is "complete"

delay 0.5

end repeat

end tell

return true

end page_loaded

No Comments

CSS-Selector

2/09/2009
Unter http://www.selectorgadget.com/ gibt es ein kleines Tool das mit Hilfe von JavaScript das einem hilft, den korrekten css-selector für ein Objekt zu finden. Ist wahrscheinlich recht praktisch, wenn man Seiten nachträglich skripten möchte oder existierende mit einem neuen Stylesheet versehen möchte. Quelle
No Comments

YouTube Kommentare auslesen…

16/08/2009

Diese Posting im AppleScript-Forum hat mich auf die Idee gebracht, eine Skript zu schreiben, welches die Kommentare zu einem YouTube-Film ausließt...

Keine Ahnung wofür das am Ende gut sein mag, aber der Rechner surft nun ohne mein Zutun im Netz und schreibt was in Text-Edit, sieht richtig nach Arbeit aus ;-)
Code zum markieren einmal anklicken

(**

16.08.2009

YoutubeCommentCopy v0.1 by hubionmac.com

Open a youtube site with Text Comments open or view all comments

The Script will copy them to a TextEdit file (autho&comment)

**)


-- Change this if you are sure new comments are loaded faster/slower

property reload_delay : 10

-- Change this if you are use another languagge than english

property nextString : "Next"


set timestamp to (do shell script "date +%Y-%m-%d") & " @ " & (do shell script "date +%H:%M")

set headline to timestamp & return & get_info_headline()

tell application "TextEdit"

set newdoc to make new document

end tell

set current_comments to getComment_list()

tell application "TextEdit"

set text of newdoc to text of newdoc & headline & current_comments

end tell

scroll_down_text_edit()


repeat until 1 = 0

if check_if_next_exists() = 1 then

delay reload_delay

set current_comments to getComment_list()

tell application "TextEdit"

set text of newdoc to text of newdoc & current_comments

end tell

scroll_down_text_edit()

else

exit repeat

end if

end repeat





on get_info_headline()

tell application "Safari"

tell document 1

return do JavaScript "

var link2Movie = document.getElementById('comment-video-info').getElementsByTagName('span')[0].getElementsByTagName('a')[0];

'----------------------------------------------------\\nMovieName:\\t' + link2Movie.innerHTML + '\\nURL:\\t' + link2Movie.href + '\\n----------------------------------------------------\\nComments:\\n----------------------------------------------------\\n';

"

end tell

end tell

end get_info_headline



on scroll_down_text_edit()

tell application "TextEdit"

activate

tell application "System Events"

keystroke (ASCII character 31) using command down

end tell

end tell

end scroll_down_text_edit



on check_if_next_exists()

tell application "Safari"

tell document 1

return do JavaScript "

//this variable has to be changed when you use a different language

var nextString = '" & nextString & "';

var clickedit = 0;

var comment_area = document.getElementById('recent_comments');

for (var i = 0; i < comment_area.getElementsByTagName('div').length; i++)

 {

    if (comment_area.getElementsByTagName('div')[i].className == 'watch-comment-pagination')

    {

        for (var k = 0; k < comment_area.getElementsByTagName('div')[i].getElementsByTagName('a').length; k++)

        {

            if (comment_area.getElementsByTagName('div')[i].getElementsByTagName('a')[k].innerHTML == nextString)

            {//somehow the onlick events produces an error when called... so try it an even go on on an error

                try {

                    eval(comment_area.getElementsByTagName('div')[i].getElementsByTagName('a')[k].getAttribute('onclick'));

                    clickedit = 1;

                    break;

                } catch(e) {

                    clickedit = 1;

                    break;

                }

            }

        }

    }

}

//return clicked status was there something to click or not

clickedit;

"

end tell

end tell

end check_if_next_exists



on getComment_list()

tell application "Safari"

tell document 1

set h to do JavaScript "

//that is where the comments are

var comment_body_id_name = 'comment_body_'

var comment_area = document.getElementById('recent_comments');

var myoutput = new Array();

//go through all divs to find the comment_div

for (var i = 0; i < comment_area.getElementsByTagName('div').length; i++)

 {

    if (comment_area.getElementsByTagName('div')[i].id.search(/comment_body_.+/) > -1)

    {

        var comment_id = comment_area.getElementsByTagName('div')[i].id.slice(comment_body_id_name.length, comment_area.getElementsByTagName('div')[i].id.length)

//go through the comment div to find the author's name div

        for (var j = 0; j < document.getElementById(comment_id).getElementsByTagName('a').length; j++)

        {

            if (document.getElementById(comment_id).getElementsByTagName('a')[j].className == 'watch-comment-auth')

            {

                var current_author = document.getElementById(comment_id).getElementsByTagName('a')[j].innerHTML;

                break;

            }

        }

//now use the the latest comment id to get the comment

        for (var k = 0; k < comment_area.getElementsByTagName('div')[i].getElementsByTagName('div').length; k++)

        {

            if (comment_area.getElementsByTagName('div')[i].getElementsByTagName('div')[k].className == 'watch-comment-body')

            {

//push everything into an array and replace some stupid stuff (tabs, spaces, br

                myoutput.push(current_author + ' ' + comment_area.getElementsByTagName('div')[i].getElementsByTagName('div')[k].getElementsByTagName('div')[0].innerHTML.replace(/\\t/g, '').replace(/\\n/g, '').replace(/<br>/g, '') + '\\n');

                myoutput.push();

                break;

            }

        }


    }


}

//just output the array as text

myoutput.join('');

"

return h as text

end tell

end tell

end getComment_list

No Comments

So schön Firefox 3.5 auch sein mag…

27/06/2009
verliert er leider bei dem Test doch gegen Safari 4. Gerade wenn man Dauerfeuer gibt, läuft Safari flüssig weiter, FireFox kommt dagegen doch ins stocken. Mal sehen wie sich eine der
angepassten Versionen schlägt (nervt mich aber schon etwas, dass man für die wahre Performance auf solche inoffiziellen Versionen zurückgreifen muss :-/ )
1 Comment

Pimp my Mactechnews

21/06/2009
Ich liebe Text in Spalte und ich hasse Werbung. Und dank dieses Skriptes passt sich die Mactechnews-Seite damit auch entsprechend an =)
Code zum markieren einmal anklicken
javascript:if (document.URL.indexOf('mactechnews')>-1) { for (var i=0;i<document.getElementsByTagName('div').length;i++) { if (document.getElementsByTagName('div')[i].className=='NewsArticleContent') { var blafasel = document.getElementsByTagName('div')[i].innerHTML.split(' '); var dieMitte = (blafasel.length - (blafasel.length % 2))/ 2; partOne = new Array(); partTwo = new Array(); for (var m=0;m<dieMitte;m++) { partOne.push(blafasel[m]); } for (var m=dieMitte;m<=blafasel.length;m++) { partTwo.push(blafasel[m]); } myoutput = '<div style=\"width: 45%; float: left; padding-right: 10pt; display: inline; text-align: justify;\">' + partOne.join(' ') + '</div><div style=\"width: 45%; float: left; padding-right: 10pt; display: inline; text-align: justify;\">' + partTwo.join(' ') + '</div>'; document.getElementsByTagName('div')[i].innerHTML = myoutput; }else if (document.getElementsByTagName('div')[i].className.indexOf('CommercialContent')>-1) { document.getElementsByTagName('div')[i].innerHTML = ''; } }}

Einfach als Bookmark speichern (Markieren und in die Bookmarkleiste ziehen) und nach dem Aufruf der Seite anklicken =)

1 Comment