From 83c8c7b0de24ebfdda2e642600e88e1b0304b88b Mon Sep 17 00:00:00 2001 From: Rahul Raj Date: Sat, 18 Jan 2020 22:58:28 +0530 Subject: [PATCH] version 0.1.6 released --- README.md | 18 ++- dist/netizenship-0.1.2-py3-none-any.whl | Bin 0 -> 3618 bytes dist/netizenship-0.1.2.tar.gz | Bin 0 -> 3101 bytes dist/netizenship-0.1.3-py3-none-any.whl | Bin 0 -> 3618 bytes dist/netizenship-0.1.3.tar.gz | Bin 0 -> 3091 bytes dist/netizenship-0.1.4-py3-none-any.whl | Bin 0 -> 3631 bytes dist/netizenship-0.1.4.tar.gz | Bin 0 -> 3134 bytes dist/netizenship-0.1.5-py3-none-any.whl | Bin 0 -> 3608 bytes dist/netizenship-0.1.5.tar.gz | Bin 0 -> 3092 bytes dist/netizenship-0.1.6-py3-none-any.whl | Bin 0 -> 3660 bytes dist/netizenship-0.1.6.tar.gz | Bin 0 -> 3138 bytes netizenship.py | 104 +++++++------- poetry.lock | 135 ++++++++++++++++++ pyproject.toml | 21 +++ setup.py | 22 +++ snap/snapcraft.yaml | 24 ---- venv/bin/netizenship | 8 ++ .../__pycache__/netizenship.cpython-37.pyc | Bin 0 -> 3616 bytes .../netizenship-0.1.6.dist-info/INSTALLER | 1 + .../netizenship-0.1.6.dist-info/LICENSE | 21 +++ .../netizenship-0.1.6.dist-info/METADATA | 14 ++ .../netizenship-0.1.6.dist-info/RECORD | 9 ++ .../netizenship-0.1.6.dist-info/WHEEL | 4 + .../entry_points.txt | 3 + .../python3.7/site-packages/netizenship.py | 117 +++++++++++++++ 25 files changed, 424 insertions(+), 77 deletions(-) create mode 100644 dist/netizenship-0.1.2-py3-none-any.whl create mode 100644 dist/netizenship-0.1.2.tar.gz create mode 100644 dist/netizenship-0.1.3-py3-none-any.whl create mode 100644 dist/netizenship-0.1.3.tar.gz create mode 100644 dist/netizenship-0.1.4-py3-none-any.whl create mode 100644 dist/netizenship-0.1.4.tar.gz create mode 100644 dist/netizenship-0.1.5-py3-none-any.whl create mode 100644 dist/netizenship-0.1.5.tar.gz create mode 100644 dist/netizenship-0.1.6-py3-none-any.whl create mode 100644 dist/netizenship-0.1.6.tar.gz create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 setup.py delete mode 100644 snap/snapcraft.yaml create mode 100755 venv/bin/netizenship create mode 100644 venv/lib/python3.7/site-packages/__pycache__/netizenship.cpython-37.pyc create mode 100644 venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/INSTALLER create mode 100644 venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/LICENSE create mode 100644 venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/METADATA create mode 100644 venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/RECORD create mode 100644 venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/WHEEL create mode 100644 venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/entry_points.txt create mode 100644 venv/lib/python3.7/site-packages/netizenship.py diff --git a/README.md b/README.md index c0bdc77..2a11eac 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,27 @@ This is a commandline tool to find the online presence of a username in popular social media websites like Facebook, Instagram, Twitter, etc. -Development in progress. (As on 18 Jan 2020) +## Installation + +Install this tool via following command + + `pip install netizenship` + +## Usage + +Once the tool is installed, run it by executing the command `netizenship` +and then enter the username to search for + +## Contribute + +Development started on 18 Jan. Present version is at infant stage. All contributions are welcomed. + ## License MIT License Copyright (c) 2020 Rahul Raj -Read full license [here](./LICENSE) \ No newline at end of file +Read full license [here](./LICENSE) diff --git a/dist/netizenship-0.1.2-py3-none-any.whl b/dist/netizenship-0.1.2-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..753f88da1720b6559e9310d3e38b12666b1543fd GIT binary patch literal 3618 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 X14bx@{m1|SjQeY7zjEZ*e*gLpobd*! literal 0 HcmV?d00001 diff --git a/dist/netizenship-0.1.2.tar.gz b/dist/netizenship-0.1.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c12c145ba7e8df54e79124648639aa9e597a0506 GIT binary patch literal 3101 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 literal 0 HcmV?d00001 diff --git a/dist/netizenship-0.1.3-py3-none-any.whl b/dist/netizenship-0.1.3-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..e87f841aaf568956068002798165588202bb78a8 GIT binary patch literal 3618 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 VXzHWL001;cYxt;gq(Hxa{Rcl#0iOT> literal 0 HcmV?d00001 diff --git a/dist/netizenship-0.1.3.tar.gz b/dist/netizenship-0.1.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..1acbf54522817be15d02f0d1c89c803c80f80557 GIT binary patch literal 3091 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

LsDVYfF)CzI;IIw$TI5o5#N`~TXtq#X%syv& z8HY|0>nKi$lKPuu$LsJ%3JMf!-C)NCp^TbYWzk)PVndBe<4wZ)vQgAVb@H3pc!bJE zLWT=G+^5Q zKPwzW`;Vt2>i5_8lfw_b|LS0WdIA6?z_Nqs;~&1i>}Nla|JA7eB1dsD{G9yXw)F$> zUo!F+5ZHe(GyUwSe~8MDxF1E}Z=ChvpX2@~2|p5lO!>cwtxP{B{#gKMUHXH_000aJ NYy6;WB#!?6^&eEf22TJ0 literal 0 HcmV?d00001 diff --git a/dist/netizenship-0.1.5.tar.gz b/dist/netizenship-0.1.5.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..654272059bf220a62fb4a631724a7cbdcfd37819 GIT binary patch literal 3092 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 literal 0 HcmV?d00001 diff --git a/dist/netizenship-0.1.6-py3-none-any.whl b/dist/netizenship-0.1.6-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..7d6ccfdecb22271011b8876ee1d62958f4986560 GIT binary patch literal 3660 zcmai%cT`i`5{Hveq=|qDEhtrL5X=a2dJUUO!Cv&PJjfe{P<09X!86kt9hSy#>k z0NmsR01jS&uX_+7)ZI7Gli-i=4=J^__Zw0HllscX95_-sktUT8CbKbvvwNN54SYyGNB;OKPkIrGIlj-%@m+acv-%JPi2{uKfR5KPbNIio` z2gT+~*NxlZFtQd4eD@Ue=3a(7;=6+|RtdqJ_KI(wzOLY|k_dcyN33YK60 zhMD59Zr5l3oNC;J?W&rd`{4nzKg^M9R;ml#T7^2KoQd;!hFl$M8TQTe39Sos51(q9 zKc?(73cjc%a|PwbQ3ml%RxM%>zp^jdSQsS~y_vI+t70U+$8cZPi!%Pk+_Y;`Rp@K< zmJmC3P!Z%lB5&v08?P$V3p~M{Lgn6vGFljoAIaeIW{v!8*`{l4Objh#9<#QHSo{jM zQ8xh8i9;4a%a18MR}k#}W9P=Ky!CCvI`{6DK5ew|Vx^fdmbad9g4jG1h|8-^veH$x zVUn7s-XywkI?0TcEz_`~tP%yZJF*qB5cq>nE1qW$_td=B<8CsIT51D+O}JTH_AzBF z7Tg1-WU*Q%cRuO)IN_2I9o6j5y|DSAH}_MjR62o?&HS=R&3h>uC+W9p`f|PL%zO(H zwlgu)Md6mm$mJLe!q9;l909Wjy$w9G2qrZ$AL?T`gWvot?uS+;SDb$NCTA-8_ZowI zd~x}3*KR++Qq#-EADo`q%g`$Z(?Gt;(RyT=?9$K;PruH+)!#GR=x<(KynVLDF%h+L zEcSZwrW;>OOtZ#NGs@|(%EWcyhE6Z_-&T%+J&8E2k_h|PZTDD=H1+JBo_an!&l6~p z)7mU2IXB2R#xZE)^Q9$UubKQnqDP5FdJMI~x7J-8r)m@UOo<@*?TwZ)mVPb0}JkQ@sDpu>J zV%Cui1vNf}7Z5jz6c@9h&PoJM8pBD>3XO?)M&Y(Mx4qpPnMDeTp>vzvT%6Pd zYvJ*d1d}hh(Ipq^n&-6Jl(@{NsK2=N2s^4%B25?(p! zczG@Nu3(2!v_JDX$bK?xS##eJUXvp&+F1BY7|36>xPV13I60JmlDBt$(YeAll&ke* zgdSKGlRI7O0}C1HGahx{1DgG>v}4!K7m{QSBwhZ%U_VMbTppo-P(ip60)yZLUk|^N z?!G|*A?N-52);pqh@jtt5=}bjavgO2YbQ+*Z(!0gl*u=S@U{|zcDasL*h7qq{iLMF z6p;u7{BR@yO$XWsfB*nlMgTzk7e^ZDqcJ9U%sHH)--J9@{Wt5RP_LqU_UkpOXro6e z@#3%3Ci!{L4rKn99r=6TZnIVmm&G8zY&p6H5JUp69gA}Jo~17rXa;jHWgq&T6iNb} zyM#|3^-D?*)~e;YCEUm~v*5Y8>@PGgI;axa>K!{a)yo@>@-gPNviB1LDx^1yAQvCsCGa?fkN z)-e4xLPkV>;9e&s^mFvw^2;)#2$N!*zU7EUqelZjoV@gf)An>X>eHfbq()}Poq8!^ zVf(K;Y|Bn+ZpB%Z^UeS} z&X+ScPiB*^I^IY6R|9fne#-S9zs>1&&)UIzHH>0%zNGn z8-fLQt@Jzb2QEii4Tre|dl<4>M5KB2=Z3eiHBB{YIpUAL*bOh2S77VKK=gF8r7{DF!7B4w?y z7>p4+9c$d)b=VLt+wqQGiIeY991AdQH-sC&+D=yBq+3nlG7lKz=LCpMlhc_qp}h0V zX}m>KZj!b#Y2fs`0c450484|u^HY=4MRSr_0FEBik;E@9WQ?&u z>7p!9=~R?yvpffRc^9G+)nn_U+8?S@mN6rD9_pMt@XkyND$(w&Bm9_ z9N0F+M#nHCRcZ}2fI^bpgHIl2<&W!y9?r8yd~@WpnF!h7x<=g-8SAn;?437zKLohM z>LPMl;`9P!bF3uMF0{W}MfxtFbls`d8$Xg22C04G*r>N*POJNdlXNS55Bh#DtTu3` z0t)diX;b+sm`;4?d(P0O zvyZeol7nHSrRV06Oy2r>Rz5vVdaBW>y#cZ8C2Knz>@bsvPfMK-OpYcyQIQuIGDFUd zy%g@DQ9)O^OCLUX*g8MkkY_ZaWJS9mQDt=6*lk_Ep5e!zUZ}O;Cw&m((E}6vMT~J6 zv?)&aa=UtP6cPaF)VUzQGB1K*6MBWsk^bhAN{f?^V`yEP#jn06M(z^^sh13fZuNL; zN2@fjoccca^+vA0cFwDrlKNq2l9Nu=Wx?C`rFaF{<}&Anve%ZRkQOcNhjuUUQzmU& zN3cT*F(bwFwBYjXCuJ;)c8{~`PTWA>mQ?RP(rR(jZ_)ehoR&`YR>hr(rf73zY#j=Z zAn9DGauni-Nk%w+t{c_%9MPGS<`A-22)fPpq)0}dkRUXAKRBR>K4D6o6(3V)v0n5~ zUUjBM7hIn(s@Skz*3}Pk=K&8{fkx}64OHP>&+^}eKXT@T^v4yK#cLb)Y5C-hw;WnS zpI|ttd2V~++Mvdb0x#DBfhV0GSa1eP_Txpqk+8Mm$I)GFUBIoagE#|0V21xcUmOJc z&!;f*kL|~4<0s$0G_Zeq0sw`;p@WI#e|&%0&VC~QrBD5b9BIP*_vC+dt)GB@QIY=u zfk4*32mYxkKjVJZfdArBeu4Y9BK%DJIphCJ++h3r3;r|z%?z0iA_D+0AFTd^s&VA_ Gy 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 c6|HDRD_YTtR^TF91*g0PA5J_5c6? literal 0 HcmV?d00001 diff --git a/netizenship.py b/netizenship.py index 0002f27..8d4e2e4 100644 --- a/netizenship.py +++ b/netizenship.py @@ -61,55 +61,57 @@ } -def get_website_membership(site): - global uname - global websites - url = websites[site] - if not url[:1]=='h': - link = 'https://'+uname+url - else: - link = url+uname - state = "FAIL" - - try: - # with eventlet.Timeout(20): - response = requests.get(link) - tag = soup.find(id=response.status_code) - msg = tag.find_parent('dt').text - response.raise_for_status() - - except: - print(site.rjust(width), ':', colored(state.ljust(width//2), 'red') , '(Status:', msg, ')') - - else: - state = 'SUCCESS' - print(site.rjust(width), ':', colored(state.ljust(width//2), 'green'), '(Status:', msg, ')') - - -def banner(text, ch='=', length=78): - spaced_text = ' %s ' % text - banner = spaced_text.center(length, ch) - print(banner) - -ascii_banner = figlet_format('Netizenship') -print(ascii_banner) -banner_text = "MIT License, Copyright (c) 2020 Rahul Raj" -banner(banner_text) - -status_code_html = 'https://en.wikipedia.org/wiki/List_of_HTTP_status_codes' -global uname -uname = input("Enter the username: ") -width = 15 - -page = requests.get(status_code_html) -soup = BeautifulSoup(page.content, 'html.parser') - -# with concurrent.futures.ThreadPoolExecutor() as executor: -# executor.map(get_website_membership, list(websites.keys())) - -for site in list(websites.keys()): - try: - get_website_membership(site) - except: - pass \ No newline at end of file +def main(): + + def banner(text, ch='=', length=78): + spaced_text = ' %s ' % text + banner = spaced_text.center(length, ch) + print(banner) + + def get_website_membership(site): + global uname + global websites + url = websites[site] + if not url[:1]=='h': + link = 'https://'+uname+url + else: + link = url+uname + state = "FAIL" + + try: + # with eventlet.Timeout(20): + response = requests.get(link) + tag = soup.find(id=response.status_code) + msg = tag.find_parent('dt').text + response.raise_for_status() + + except: + print(site.rjust(width), ':', colored(state.ljust(width//2), 'red') , '(Status:', msg, ')') + + else: + state = 'SUCCESS' + print(site.rjust(width), ':', colored(state.ljust(width//2), 'green'), '(Status:', msg, ')') + + ascii_banner = figlet_format('Netizenship') + print(ascii_banner) + banner_text = "MIT License, Copyright (c) 2020 Rahul Raj" + banner(banner_text) + + status_code_html = 'https://en.wikipedia.org/wiki/List_of_HTTP_status_codes' + global uname + uname = input("Enter the username: ") + width = 15 + + page = requests.get(status_code_html) + soup = BeautifulSoup(page.content, 'html.parser') + + with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor: + try: + executor.map(get_website_membership, list(websites.keys()), timeout=5) + except: + print('Exception occured, skipping') + pass + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..9d2f0a1 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,135 @@ +[[package]] +category = "main" +description = "Screen-scraping library" +name = "beautifulsoup4" +optional = false +python-versions = "*" +version = "4.8.2" + +[package.dependencies] +soupsieve = ">=1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +category = "main" +description = "Python package for providing Mozilla's CA Bundle." +name = "certifi" +optional = false +python-versions = "*" +version = "2019.11.28" + +[[package]] +category = "main" +description = "Universal encoding detector for Python 2 and 3" +name = "chardet" +optional = false +python-versions = "*" +version = "3.0.4" + +[[package]] +category = "main" +description = "Internationalized Domain Names in Applications (IDNA)" +name = "idna" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.8" + +[[package]] +category = "main" +description = "Pure-python FIGlet implementation" +name = "pyfiglet" +optional = false +python-versions = "*" +version = "0.8.post1" + +[[package]] +category = "main" +description = "Python HTTP for Humans." +name = "requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.22.0" + +[package.dependencies] +certifi = ">=2017.4.17" +chardet = ">=3.0.2,<3.1.0" +idna = ">=2.5,<2.9" +urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" + +[package.extras] +security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] + +[[package]] +category = "main" +description = "A modern CSS selector implementation for Beautiful Soup." +name = "soupsieve" +optional = false +python-versions = "*" +version = "1.9.5" + +[[package]] +category = "main" +description = "ANSII Color formatting for output in terminal." +name = "termcolor" +optional = false +python-versions = "*" +version = "1.1.0" + +[[package]] +category = "main" +description = "HTTP library with thread-safe connection pooling, file post, and more." +name = "urllib3" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" +version = "1.25.7" + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] + +[metadata] +content-hash = "d80741eb1a90cf7cd4bd5d2788cc0306f538e5ee3fdb2b0a9d2486f90c423530" +python-versions = "^3.7" + +[metadata.files] +beautifulsoup4 = [ + {file = "beautifulsoup4-4.8.2-py2-none-any.whl", hash = "sha256:e1505eeed31b0f4ce2dbb3bc8eb256c04cc2b3b72af7d551a4ab6efd5cbe5dae"}, + {file = "beautifulsoup4-4.8.2-py3-none-any.whl", hash = "sha256:9fbb4d6e48ecd30bcacc5b63b94088192dcda178513b2ae3c394229f8911b887"}, + {file = "beautifulsoup4-4.8.2.tar.gz", hash = "sha256:05fd825eb01c290877657a56df4c6e4c311b3965bda790c613a3d6fb01a5462a"}, +] +certifi = [ + {file = "certifi-2019.11.28-py2.py3-none-any.whl", hash = "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3"}, + {file = "certifi-2019.11.28.tar.gz", hash = "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"}, +] +chardet = [ + {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, + {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, +] +idna = [ + {file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, + {file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, +] +pyfiglet = [ + {file = "pyfiglet-0.8.post1-py2.py3-none-any.whl", hash = "sha256:d555bcea17fbeaf70eaefa48bb119352487e629c9b56f30f383e2c62dd67a01c"}, + {file = "pyfiglet-0.8.post1.tar.gz", hash = "sha256:c6c2321755d09267b438ec7b936825a4910fec696292139e664ca8670e103639"}, +] +requests = [ + {file = "requests-2.22.0-py2.py3-none-any.whl", hash = "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"}, + {file = "requests-2.22.0.tar.gz", hash = "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4"}, +] +soupsieve = [ + {file = "soupsieve-1.9.5-py2.py3-none-any.whl", hash = "sha256:bdb0d917b03a1369ce964056fc195cfdff8819c40de04695a80bc813c3cfa1f5"}, + {file = "soupsieve-1.9.5.tar.gz", hash = "sha256:e2c1c5dee4a1c36bcb790e0fabd5492d874b8ebd4617622c4f6a731701060dda"}, +] +termcolor = [ + {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, +] +urllib3 = [ + {file = "urllib3-1.25.7-py2.py3-none-any.whl", hash = "sha256:a8a318824cc77d1fd4b2bec2ded92646630d7fe8619497b142c84a9e6f5a7293"}, + {file = "urllib3-1.25.7.tar.gz", hash = "sha256:f3c5fd51747d450d4dcf6f923c81f78f811aab8205fda64b0aba34a4e48b0745"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..bd409a5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,21 @@ +[tool.poetry] +name = "netizenship" +version = "0.1.6" +description = "Tool to check the username with popular websites for membership" +authors = ["Rahul Raj "] + +[tool.poetry.dependencies] +python = "^3.7" +requests = "^2.22.0" +beautifulsoup4 = "^4.8.2" +pyfiglet = "^0.8.post1" +termcolor = "^1.1.0" + +[tool.poetry.dev-dependencies] + +[tool.poetry.scripts] +netizenship = 'netizenship:main' +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" + diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..7cc8f9a --- /dev/null +++ b/setup.py @@ -0,0 +1,22 @@ +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() + +setuptools.setup( + name="netizenship-rahulrajpl", # Replace with your own username + version="0.0.1", + author="Rahul Raj", + author_email="rahulrajpl@gmail.com", + description="Tool for checking online presence, given a username", + long_description=long_description, + long_description_content_type="text/markdown", + url="https://github.com/pypa/sampleproject", + packages=setuptools.find_packages(), + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + ], + python_requires='>=3.6', +) \ No newline at end of file diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml deleted file mode 100644 index 5582561..0000000 --- a/snap/snapcraft.yaml +++ /dev/null @@ -1,24 +0,0 @@ - - name: netizenship - version: '0.1' # just for humans, typically '1.2+git' or '1.3.2' - summary: A tool to check the membership of a given username in 30+ popular websites - description: | - This is a commandline tool to find the online presence of a username in popular social media websites like Facebook, Instagram, Twitter, etc. - - Development in progress. (As on 18 Jan 2020) - - Contribute at https://github.com/rahulrajpl/netizenship - - MIT License - - Copyright (c) 2020 Rahul Raj - - grade: devel # must be 'stable' to release into candidate/stable channels - confinement: devmode # use 'strict' once you have the right plugs and slots - - parts: - netizenship: - source: https://github.com/rahulrajpl/netizenship.git - source-tag: v1.0 - plugin: python - diff --git a/venv/bin/netizenship b/venv/bin/netizenship new file mode 100755 index 0000000..ca2c658 --- /dev/null +++ b/venv/bin/netizenship @@ -0,0 +1,8 @@ +#!/media/rahul/685a0b20-7575-47d9-8748-a731e2cc8892/rahul/code/netizenship/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from netizenship import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/venv/lib/python3.7/site-packages/__pycache__/netizenship.cpython-37.pyc b/venv/lib/python3.7/site-packages/__pycache__/netizenship.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4261b8a35621e9fd3eb33d8355292dd0e83deba0 GIT binary patch literal 3616 zcmb_eNt4^g6-Hwt2o6W1CED#EvLuVP1S+ypPNpm;lB{J?qbWrkM|K~~0?|#fhuDm6 zXhalw8l@~BRJo^em^nI?Lw-PhKz=|@xaKr}L8rV1NDh^9atc`80DFD!ecxN|HJi2q z&)@HS@XeoA73E*@&;0oiK7Ip@{|!2#V1*!}1_&c~Yk?YSSVMA55A@K$M)_?7W>~|u z@>>loT!(oxu)_v!z*vn~q)u$oAS?84MvjvcG zyia~g9P%@AiF`mVlPlyZ`H);AE%Fihm|Q0}{(RM2AuegZQgD;5lA9wn{VQ$mDR7V4 zQCdIG|G6E5bQ&p%4jQZ?^|b46~l=$6*_e4p@}E^oKF? zX*lSS&NFYA z1<>!X63}*jVm|+Zg*2{&IWr&QaTXCjh%-`6oSaV( z#=p(@e+-6{uxzH!@%c)x2gjmHklINBCwDSwg%lw#7-y<}v zw96OrgWABI7oPBD+*+udNRQ~TO08_k>isxN0W@hud0)P8Hj%Q#BQF?_tFvZ~+|DmA zi?Yi`ECGPM(k}8}`%9qadcM#rqPyH3!`X1VCuWC9gn!M*op((m^$KYu7qPf~bcD30 z6vySGG55VFnz>HJlcozkKag-s4f0iYH%>_cR4*-=1?2&@%LC6ZUAA=glz~HGq1ts7p0?M^GWF&xOP{%!xM^)4e1294qGeA!?p#>ajjEv8k?Px zy}0(YA}g-nW8z-PPi#J7V$Q4+;kOb58epR%?eEJVET0;*Iy4O${|j`G%rv6ELQ~~C`iY9s~ zwmd}L%5~=ocUo#;Li&O*UKmLV@w{aex}Yybq58wZ3}`eEL)_pAFqU-73A0yv%MVHl zg@^L?c3Xr=J7LL=!`Of zHdP}F3|)Q^eX5Ob3Uyzbr~r}vTG`Pj`i?=2Hvrhg*f)uJfOcwAbE5BC2LJ-VaeD?w zeWL8!uh9V_HPHZ@uDnLXIO(+diMhcaPw`l!Pg+*9{l$=}FI>HkfUw?~QMXmGY{re9(9c&CzN~2b@ zu;yh?VPvu*Dy)=#n?auDg*Kp~(EBVRMFRp3oY9pL5;x>fH-V5HiBy)B#aikyPGtqs ztrn)zVG1MN$-v>IEQJxs?^dnQWsy~ASsD~Nlu#q6Y~bwjUWlPk92FV_w?Yf~00^f; zu1^YMmk}{6Ig}ogr=14Tx--eUM$p;gsFx~i%+S_RIms3vkX9p#tb z<<5^Eg&SK(jLch0#oKk~e-&@}r*l{!8U9Fi+GJdG<9_$?_V&}6u}Z7*{L};KT4m8H z6N?06-8q!%=8d5U1E>sA7(bL22e2EV_p%GA2BIH7luiv}H6cTNCh`jpUivfGE*2%3NYBfG3$l}zOl7Q)g(wIYiNb~tI8Q>4 zYkjB(AsGFd z8`ZlE8+dJrZe6K+p(ow|I6`N~ms9{nT2jJ~WLMHcm&o3Qzx)z(ifS9HXDtXAIIU5|%Z1MPgmrH=3.7,<4.0 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Requires-Dist: beautifulsoup4 (>=4.8.2,<5.0.0) +Requires-Dist: pyfiglet (>=0.8.post1,<0.9) +Requires-Dist: requests (>=2.22.0,<3.0.0) +Requires-Dist: termcolor (>=1.1.0,<2.0.0) diff --git a/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/RECORD b/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/RECORD new file mode 100644 index 0000000..53b3e41 --- /dev/null +++ b/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/RECORD @@ -0,0 +1,9 @@ +../../../bin/netizenship,sha256=Kg8QFtLkZmp60MrZfLh-9gnHJgIIAnF9GKG_AnGjcUw,283 +__pycache__/netizenship.cpython-37.pyc,, +netizenship-0.1.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +netizenship-0.1.6.dist-info/LICENSE,sha256=puFknhsm5XWVRCjFDD13BlM2-eeCRURoF5oDy3JjgDw,1066 +netizenship-0.1.6.dist-info/METADATA,sha256=6x1V5k9iv15Rtlr1IpPOMw9QEIqwB6QAiC7lCyPWaps,531 +netizenship-0.1.6.dist-info/RECORD,, +netizenship-0.1.6.dist-info/WHEEL,sha256=VN2eEg4PHbTOniXb-cCYQPc6zUTS4dAcATjlgU3q-Lo,83 +netizenship-0.1.6.dist-info/entry_points.txt,sha256=yWDnch-uvCM7qGAZQ59ywmAYaHxYvT6Xov4DIne0Ymk,48 +netizenship.py,sha256=8ug270uExwXZ9zSd6X6hvsueXZnT3jgCVprSRNqlfUc,3738 diff --git a/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/WHEEL b/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/WHEEL new file mode 100644 index 0000000..0ee3fc2 --- /dev/null +++ b/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/WHEEL @@ -0,0 +1,4 @@ +Wheel-Version: 1.0 +Generator: poetry 1.0.2 +Root-Is-Purelib: true +Tag: py3-none-any diff --git a/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/entry_points.txt b/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/entry_points.txt new file mode 100644 index 0000000..b5234a1 --- /dev/null +++ b/venv/lib/python3.7/site-packages/netizenship-0.1.6.dist-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +netizenship=netizenship:main + diff --git a/venv/lib/python3.7/site-packages/netizenship.py b/venv/lib/python3.7/site-packages/netizenship.py new file mode 100644 index 0000000..8d4e2e4 --- /dev/null +++ b/venv/lib/python3.7/site-packages/netizenship.py @@ -0,0 +1,117 @@ +#!/usr/bin/python3 +"""Tool to automatically check the membership of a given username +in popular websites. + + +Inspired by: https://github.com/thelinuxchoice/userrecon/blob/master/userrecon.sh + +MIT License + +Copyright (c) 2020 Rahul Raj +""" + +import requests +from termcolor import colored +from time import sleep +from bs4 import BeautifulSoup +import concurrent.futures +from pyfiglet import figlet_format + + +global websites +websites = { + 'Facebook': 'https://www.facebook.com/', + 'Twitter': 'https://twitter.com/', + 'Instagram': 'https://www.instagram.com/', + 'Youtube': 'https://www.youtube.com/user/', + 'Reddit': 'https://www.reddit.com/user/', + 'PInterest': 'https://www.pinterest.com/', + 'Flickr': 'https://www.flickr.com/people/', + 'Vimeo': 'https://vimeo.com/', + 'Soundcloud': 'https://soundcloud.com/', + 'Disqus': 'https://disqus.com/', + 'Medium': 'https://medium.com/', + 'AboutMe': 'https://about.me/', + 'Imgur': 'https://imgur.com/user/', + 'Flipboard': 'https://flipboard.com/', + 'Slideshare': 'https://slideshare.net/', + 'Spotify': 'https://open.spotify.com/user/', + 'Scribd': 'https://www.scribd.com/', + 'Patreon': 'https://www.patreon.com/', + 'BitBucket': 'https://bitbucket.org/', + 'GitLab': 'https://gitlab.com/', + 'Github': 'https://www.github.com/', + 'GoodReads': 'https://www.goodreads.com/', + 'Instructable': 'https://www.instructables.com/member/', + 'CodeAcademy': 'https://www.codecademy.com/', + 'Gravatar': 'https://en.gravatar.com/', + 'Pastebin': 'https://pastebin.com/u/', + 'FourSquare': 'https://foursquare.com/', + 'TripAdvisor': 'https://tripadvisor.com/members/', + 'Wikipedia': 'https://www.wikipedia.org/wiki/User:', + 'HackerNews': 'https://news.ycombinator.com/user?id=', + 'CodeMentor': 'https://www.codementor.io/', + 'Trip': 'https://www.trip.skyscanner.com/user/', + 'Blogger': '.blogspot.com', + 'Wordpress': '.wordpress.com', + 'Tumbler': '.tumblr.com', + 'Deviantart': '.deviantart.com"', + 'LiveJournel': '.livejournal.com', + 'Slack': '.slack.com', + +} + + +def main(): + + def banner(text, ch='=', length=78): + spaced_text = ' %s ' % text + banner = spaced_text.center(length, ch) + print(banner) + + def get_website_membership(site): + global uname + global websites + url = websites[site] + if not url[:1]=='h': + link = 'https://'+uname+url + else: + link = url+uname + state = "FAIL" + + try: + # with eventlet.Timeout(20): + response = requests.get(link) + tag = soup.find(id=response.status_code) + msg = tag.find_parent('dt').text + response.raise_for_status() + + except: + print(site.rjust(width), ':', colored(state.ljust(width//2), 'red') , '(Status:', msg, ')') + + else: + state = 'SUCCESS' + print(site.rjust(width), ':', colored(state.ljust(width//2), 'green'), '(Status:', msg, ')') + + ascii_banner = figlet_format('Netizenship') + print(ascii_banner) + banner_text = "MIT License, Copyright (c) 2020 Rahul Raj" + banner(banner_text) + + status_code_html = 'https://en.wikipedia.org/wiki/List_of_HTTP_status_codes' + global uname + uname = input("Enter the username: ") + width = 15 + + page = requests.get(status_code_html) + soup = BeautifulSoup(page.content, 'html.parser') + + with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor: + try: + executor.map(get_website_membership, list(websites.keys()), timeout=5) + except: + print('Exception occured, skipping') + pass + +if __name__ == '__main__': + main() \ No newline at end of file