Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>vom terminal auf das adressbuch zugreifen

vom terminal auf das adressbuch zugreifen

Mac51.de
Mac51.de03.08.0616:41
hi,
ich würde gerne vom terminal - genauergesagt aus einem perl-script heraus - auf das adressbuch bzw. die datenbank des adressbuchs zugreifen.
ich würde den namen zu einer nummer herausfinden wollen.

weiss jemand wie ich sowas am besten anstelle?
0

Kommentare

_mäuschen
_mäuschen03.08.0616:54
z.Bsp.

osascript -e 'tell app "Address Book" to get the name of every person' | perl -pe 's/, /\n/g' | sort | uniq -d

anpassen an Deine Bedürfnisse

von Apple
0
Mac51.de
Mac51.de03.08.0617:07
du bist echt immer mein retter wenns um sowas geht mäuschen, leider weiss ich trotzdem nciht was ich anpassen muss.
ich nehme an dass ich das "every person" durch irgendwas ersetzen muss damit er mir nicht alle namen sondern nur di enamen der personen mit der telefonnumer XYZ ausgibt, aber wie?
0
Mac51.de
Mac51.de03.08.0617:34
tell application "Address Book"
set the_phone to "XYZ"
set the_people to (get every person whose phone contains the_phone)
return the_people
end tell


das haben wir bisher, aber wenn wir das ausführen bekommen wir ne fehlermeldung:

Adressbuch hat einen fehler erhalten: every person whose phone contains "XYZ" kann nicht in typ reference umgewandelt werden
0
Mac51.de
Mac51.de03.08.0617:38
das apple script scheint schonmal zu funktionieren:

tell application "Address Book"
set the_phone to "XYZ"
set the_people to (get name of every person whose value of phones contains the_phone)
return the_people
end tell
0
Klaus Major03.08.0617:48
Geht das vielleicht auch mir direktem Zugriff auf NUR die Adressen, also OHNE daß sich Addressbook öffnet?

Oder anders gefragt, wo legt AB die Einträge ab? Würde schon reichen


Gruß

Klaus
0
Mac51.de
Mac51.de03.08.0618:01
das adressbuch legt die in einer externen datei ab, die ist aber nicht plaintext, du kannst es also nciht einfach auslesen und musst es übers adressbuch machen.

zu meinem scritp habe ich noch ne frage:
weiss jemand wie ich es hinbekomme, dass alle nummern erkannt werden, die "the_phone" enthalten. jetzt werden nur die namen zu den nummern ausgegeben, die genau the_phone entsprechen
0
Klaus Major03.08.0618:35
Kannst Du mir trotzdem verraten, wo sich diese nichtPlainText Datei befindet?
0
_mäuschen
_mäuschen03.08.0619:59
Klaus Major, schau mal nach in ~/Library/Application Support/AdressBook


Mac51.de, habe die Frage nicht so ganz mitbekommen. Aber ev. hilft Dir dies weiter

tell application "Address Book"
set the_phone to "phone_number"
set i to (count of people)
repeat with k from 1 to i
set n to last name of person k
try
set p to value of phone 1 of person k
on error
set p to ""
end try
try
set pp to value of phone 2 of person k
on error
set pp to ""
end try
if ((p as string) is the_phone) or ((pp as string) is the_phone) then
set second_phone to value of phone 2 of person k
set the_people to name of person k
end if
end repeat
return {the_people, the_phone, second_phone}
end tell
0
Klaus Major03.08.0620:05
Jau, danke!

Hätte ich auch mal wieder selber drauf kommen können!

Aber wieso wieder 5,1 MB für meine lächerlichen 44 Adressen (OHNE ein einziges Bild)?
Und wieso nicht im XML-Format wie so viele andere Daten von OS X?

Fragen, Fragen, Fragen...
0
tuxatos
tuxatos03.08.0620:16
_mäuschen

Zum einen ist das Skript sehr langsam und zum anderen findet es auch nur die Nummern, die komplette Telefonnummer sind.

da ist folgendes Skript um einiges schneller und kleiner und macht das gleiche:

tell application "Address Book"
set theNumber to "0123123456"
set thePeople to (get name of every person whose value of phones contains theNumber)
return thePeople
end tell

Aber das Problem ist, dass eine Suche nach nur einem Teil der Telefonnummer nicht möglich ist. Bswp. ohne Vorwahl.

Grüße Markus
0
_mäuschen
_mäuschen03.08.0620:26
Ja, richtig, ist langsam.
Aber Mac51.de fragte nach einer Möglichkeit für alle Nummern eines Kontakts

Und Teile der Nummer kann man auch so abfangen

if the_phone is in (p as string) or the_phone is in (pp as string) then
0
tuxatos
tuxatos03.08.0620:33
Das Beispiel von mir geht mit allen Nummern eines Kontaktes aber halt leider nicht mit Teilen von dieser.

Das macht dein Skript nach der Modifikation richtig - das stimmt - aber leider zu langsam. Hast du 'ne Idee, wie man die schnelle Variante so anpassen kann, dass es auch nach Teilen der Nummer sucht?

Grüße Markus
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.