From 5d70fe1ba2828628319a4f4a41a50a55b9e9ed95 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 19 Apr 2025 20:23:37 +0200 Subject: [PATCH] initial --- .gitignore | 2 + .vscode/settings.json | 3 ++ QRcode.png | 1 + README.md | 0 contacts.db | Bin 0 -> 90112 bytes main.py | 6 +++ pyproject.toml | 10 ++++ send_daily_msg copy.py | 43 +++++++++++++++++ send_daily_msg.py | 69 +++++++++++++++++++++++++++ start_session.ps1 | 17 +++++++ uv.lock | 104 +++++++++++++++++++++++++++++++++++++++++ 11 files changed, 255 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 QRcode.png create mode 100644 README.md create mode 100644 contacts.db create mode 100644 main.py create mode 100644 pyproject.toml create mode 100644 send_daily_msg copy.py create mode 100644 send_daily_msg.py create mode 100755 start_session.ps1 create mode 100644 uv.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2206544 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.codegpt \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..5a583f4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "taipyStudio.gUI.elementsFilePaths": [] +} \ No newline at end of file diff --git a/QRcode.png b/QRcode.png new file mode 100644 index 0000000..14dfdae --- /dev/null +++ b/QRcode.png @@ -0,0 +1 @@ +{"success":false,"message":"qr code not ready or already scanned"} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/contacts.db b/contacts.db new file mode 100644 index 0000000000000000000000000000000000000000..b177e8c525c62909ec7a9efb92755ab7d6d690d6 GIT binary patch literal 90112 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 z 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..552f954 --- /dev/null +++ b/main.py @@ -0,0 +1,6 @@ +def main(): + print("Hello from whatsapp-api!") + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..0d9f219 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,10 @@ +[project] +name = "whatsapp-api" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.13" +dependencies = [ + "asyncio>=3.4.3", + "httpx>=0.28.1", +] diff --git a/send_daily_msg copy.py b/send_daily_msg copy.py new file mode 100644 index 0000000..85ccb34 --- /dev/null +++ b/send_daily_msg copy.py @@ -0,0 +1,43 @@ +import httpx +import asyncio +import sqlite3 +import json + +url = 'http://94.177.199.207:3000/client' +session = 'AssistenzaPubblicaBardiProd' + +async def fetch(client, url): + response = await client.get(url) + return response.json() + +def getContactList(): + api = f'{url}/getContacts/{session}' + with httpx.Client() as client: + response = client.get(api) + return response.json() + +async def main(): + contactList = getContactList() + + print(type(contactList)) + + ''' + async with httpx.AsyncClient() as client: + tasks = fetch(client, url) + results = await asyncio.gather(*tasks) + for result in results: + print(result) + ''' + for contact in contactList["contacts"]: + print("\nDettagli contatto:") + print(f"Numero: {contact.get('number', 'N/A')}") + print(f"Nome: {contact.get('name', 'N/A')}") + print(f"Pushname: {contact.get('pushname', 'N/A')}") + print(f"ShortName: {contact.get('shortName', 'N/A')}") + print(f"Server ID: {contact['id']['server']}") + print(f"User ID: {contact['id']['user']}") + print(f"serialized: {contact['id']['_serialized']}") + +if __name__ == '__main__': + asyncio.run(main()) + diff --git a/send_daily_msg.py b/send_daily_msg.py new file mode 100644 index 0000000..231df06 --- /dev/null +++ b/send_daily_msg.py @@ -0,0 +1,69 @@ +import httpx +import asyncio +import sqlite3 + +url = 'http://94.177.199.207:3000/client' +session = 'AssistenzaPubblicaBardiProd' +contactDB = 'contacts.db' +createContactsTable = [ + 'DROP TABLE IF EXISTS contacts;', + ''' + CREATE TABLE contacts ( + id INTEGER PRIMARY KEY, + name text NOT NULL, + number text NOT NULL, + pushname text NOT NULL, + shortName text NOT NULL, + serialized text NOT NULL + ); + ''' +] + +def createContactsDB(): + try: + with sqlite3.connect(contactDB) as conn: + cursor = conn.cursor() + for sql in createContactsTable: + cursor.execute(sql) + print("Tables created successfully.") + except sqlite3.OperationalError as e: + print("Failed to create tables:", e) + +async def fetch(client, url): + response = await client.get(url) + return response.json() + +def getContactList(): + api = f'{url}/getContacts/{session}' + with httpx.Client() as client: + response = client.get(api) + return response.json() + +def init_db(): + createContactsDB() + contactList = getContactList() + try: + with sqlite3.connect(contactDB) as conn: + for id, contact in enumerate([item for item in contactList["contacts"] if str(item['number']).startswith('39')]): + conn.execute(f'''INSERT INTO contacts (id, name, number, pushname, shortName, serialized) VALUES ({id}, + "{contact.get("name", "N/A")}", {contact.get("number")}, "{contact.get("pushname", "N/A")}", + "{contact.get("shortName", "N/A")}", "{contact["id"]["_serialized"]}")''') + conn.commit() + print("Tables loaded successfully.") + except sqlite3.OperationalError as e: + print("Failed to load table:", e) + +async def main(): + init_db() + ''' + async with httpx.AsyncClient() as client: + tasks = fetch(client, url) + results = await asyncio.gather(*tasks) + for result in results: + print(result) + ''' + + +if __name__ == '__main__': + asyncio.run(main()) + diff --git a/start_session.ps1 b/start_session.ps1 new file mode 100755 index 0000000..78123b4 --- /dev/null +++ b/start_session.ps1 @@ -0,0 +1,17 @@ +function getQRcode { + Invoke-WebRequest -Uri 'http://94.177.199.207:3000/session/qr/AssistenzaPubblicaBardiProd/image' -Method GET -Outfile QRcode.png + ./QRcode.png +} + +$response = Invoke-WebRequest -Uri 'http://94.177.199.207:3000/session/status/AssistenzaPubblicaBardiProd' -Method GET +if ($response.StatusCode -eq 200) { + $state = ConvertFrom-Json $response.Content + if ($state.state -eq "CONNECTED") { + getQRcode + } + elseif ($null -eq $state.state) { + $response = Invoke-WebRequest -Uri 'http://94.177.199.207:3000/session/restart/AssistenzaPubblicaBardiProd' -Method GET + Start-Sleep -Seconds 20 + } +} + diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..40eb30f --- /dev/null +++ b/uv.lock @@ -0,0 +1,104 @@ +version = 1 +revision = 1 +requires-python = ">=3.13" + +[[package]] +name = "anyio" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, +] + +[[package]] +name = "asyncio" +version = "3.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/54/054bafaf2c0fb8473d423743e191fcdf49b2c1fd5e9af3524efbe097bafd/asyncio-3.4.3.tar.gz", hash = "sha256:83360ff8bc97980e4ff25c964c7bd3923d333d177aa4f7fb736b019f26c7cb41", size = 204411 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/74/07679c5b9f98a7cb0fc147b1ef1cc1853bc07a4eb9cb5731e24732c5f773/asyncio-3.4.3-py3-none-any.whl", hash = "sha256:c4d18b22701821de07bd6aea8b53d21449ec0ec5680645e5317062ea21817d2d", size = 101767 }, +] + +[[package]] +name = "certifi" +version = "2025.1.31" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, +] + +[[package]] +name = "h11" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, +] + +[[package]] +name = "httpcore" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/45/ad3e1b4d448f22c0cff4f5692f5ed0666658578e358b8d58a19846048059/httpcore-1.0.8.tar.gz", hash = "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad", size = 85385 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/8d/f052b1e336bb2c1fc7ed1aaed898aa570c0b61a09707b108979d9fc6e308/httpcore-1.0.8-py3-none-any.whl", hash = "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be", size = 78732 }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + +[[package]] +name = "whatsapp-api" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "asyncio" }, + { name = "httpx" }, +] + +[package.metadata] +requires-dist = [ + { name = "asyncio", specifier = ">=3.4.3" }, + { name = "httpx", specifier = ">=0.28.1" }, +]