Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions les8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
from instabot import Bot
import os
import dotenv


class InstaChain:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

все клево, но 1 проблемма. Попробуйте найти цепочку между собой и Маском
Скорее всего бот схлопочет либо бан либо сожрет очень много памяти.
Не использовать в данной задаче БД самоубийство

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если притянули сторонние библиотеки, то можно было бы и притянуть библиотеки для построения Графа. Было бы немного оптимизировнанее и код стал бы более компактным

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Спасибо большое за замечания! На будущее учту

users = {}
bot = Bot()

def __init__(self, user1, user2, max_depth, login, password):
self.user1 = user1
self.user2 = user2
self.max_depth = max_depth
self.login = login
self.password = password

def run(self):
self.bot.login(username=self.login, password=self.password)
user1_id = self.bot.get_user_id_from_username(self.user1)
user2_id = self.bot.get_user_id_from_username(self.user2)
self.users.update({user1_id: {'parent': None, 'depth': 0}})
self._find_friends(user2_id, self.max_depth)
return self._find_chain(user2_id)

def _find_friends(self, user2_id, max_depth, depth=1):
found = False
tmp_dict = {}
for key, value in self.users.items():
if found:
break
if value['depth'] == depth - 1:
user1_followers = self.bot.get_user_followers(key)
user1_following = self.bot.get_user_following(key)
user1_friends = list(set(user1_followers) & set(user1_following))
for friend in user1_friends:
if not self.users.get(friend):
tmp_dict.update({friend: {'parent': key, 'depth': depth}})
if friend == user2_id:
found = True
break
self.users.update(tmp_dict)
if (depth != max_depth) and not found:
self._find_friends(user2_id, max_depth, depth=depth + 1)

def _find_chain(self, user2_id):
result = []
if not self.users.get(user2_id):
depth = self.users.get(user2_id)['depth']
user_id = user2_id
while True:
user_name = self.bot.get_username_from_user_id(user_id)
result.append(user_name)
user_id = self.users.get(user_id)['parent']
depth -= 1
if depth == -1:
break
return result


if __name__ == "__main__":
dotenv.load_dotenv(".env")
user1 = os.getenv("USER1")
user2 = os.getenv("USER2")
chain = InstaChain(
user1,
user2,
4,
login=os.getenv("INST_LOGIN"),
password=os.getenv("INST_PSWORD")
)
print(chain.run())