diff --git a/README.md b/README.md index 83c7315..d6e53fe 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ -# tildetel +# tildetel stuff -some stuff for tilde.tel, such as a phonebook scraper, and a microsip contact list making scraper \ No newline at end of file +some stuff for tilde.tel, such as a phonebook scraper, and a microsip contact list making scraper + +* scrapbook.py - python script that generates a pretty OK display of the contacts list, should be trivial to turn to CSV +* microsip_contactlist.sh - uses standard shell utilities to mangle and straighten the contact list into MicroSIP's contacts CSV file, + outputs tilde.tel.users.csv in the current directory diff --git a/microsip_contactlist.sh b/microsip_contactlist.sh new file mode 100755 index 0000000..cf4c7bf --- /dev/null +++ b/microsip_contactlist.sh @@ -0,0 +1 @@ +printf "\357\273\277%s\n" "Name,Number,Presence,Directory" >tilde.tel.users.csv;{ curl https://tilde.tel/phonebook.html|grep -A 9999 "\[Tilde\]"|grep -B 9999 ""|tail -n +1|head -n -1|grep -v "<\(\|/\)pre>"|tr -s "[:blank:]" "\t"|while read i;do [ -n "$i" ]&&{ echo "$i"|grep -s "^[^.]*\.[^.]*";}&&{ realm="$(echo "$i"|cut -f 1)";rest="$(echo "$i"|cut -f 2-)";}||rest="$i";[ -n "$rest" ]&&echo "$realm $rest";done|tr -s "[:blank:]" "\t"|uniq|sort|awk -F "\t" '{print $3" ("$1"),"$2",1,0"}';} >>tilde.tel.users.csv diff --git a/scrapbook.py b/scrapbook.py new file mode 100755 index 0000000..e78dc8a --- /dev/null +++ b/scrapbook.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +import requests,html.parser;r=requests.get("https://tilde.tel/phonebook.html").content.decode("utf-8"); +class h(html.parser.HTMLParser): + d=False + def handle_starttag(self, tag, attrs): + self.d=True if (tag=="pre") else False; + def handle_data(self, data): + if (self.d==True and data.strip() != ""): self.data=data +h=h();h.feed(r); +sections=["Service Numbers","The 1900s","~Tel Community"] +# ^↑^ probably a bit easier to update when needed (when the update miraculously doesn't break the rest) + +def print_services(nr,name,tilde,rest): + name=" ".join([name,rest]) + #custom name override, I think it just looks better + if (nr=="1102"): name="Music on Hold (tilderadio)" + print("|",nr,"|",name); + +def print_1900s(nr,name,tilde,rest): + #fix for the sdf gateway description + if (nr=="1987"): rest=rest.split("(")[0] + print("|",nr,"|",rest,"(by",name+")"); + + +def print_users(nr,name,tilde): + print("|",nr,"|",name.rjust(18),("("+tilde+")").ljust(0)); + +for i in h.data.split("\n"): + i=i.split();global x; + if (i != [] and not i[0].startswith("[")): + if(" ".join(i) in sections): + section=" ".join(i); + print("\nSection:",section,"\n"); + c=True; + else: c=False; + if (i[0].isdigit() == False): + tilde=i.pop(0); + if c: tilde="" + nr=i.pop(0); + if (nr.isdigit() == False): tilde="";continue + name=rest="";j=0 + if(c!=True): + for n in i: + j+=1 + if j==1:name=n + else: rest=rest+n+" "; + name=name.strip(); + if (section==sections[0]): print_services(nr,name,tilde,rest); + if (section==sections[1]): print_1900s(nr,name,tilde,rest); + if (section==sections[2]): print_users(nr,name,tilde);