Mécanique
Par souci de brièveté, le script de la promotion s'appellera "chien robot" . Imaginez que ce script au nom d'un compte de chien recueille périodiquement des messages par hashtags sur des sujets de chien et aime ces messages. Certains des auteurs de ces articles seront intéressés à savoir qui les a aimés et accéderont à la page du compte du chien. Eh bien, comme ça se passe. Quelqu'un fera défiler quelques écrans vers le bas et passera à autre chose. Quelqu'un donnera au robot quelques goûts réciproques (ce qui n'est pas mal non plus, les goûts augmentent la portée des messages). Et si vous aimez le compte (ce qui est possible, car le chien est très charismatique ), il peut s'abonner.
Attention: J'aime la masse
Il convient de noter que de telles actions sont appelées «mass-liking» et ne sont pas particulièrement bien accueillies par Instagram. Lorsqu'une activité robotique suspecte apparaît, Instagram émet d'abord plusieurs avertissements, puis il peut interdire le compte pour toujours. À propos, le massliking manuel relève également de l'interdiction (c'est-à-dire s'il ne s'agit pas d'un service automatisé qui vous plaît, mais vous personnellement).
Il y a une opinion que le massliking ne fonctionne pas très bien maintenant. Eh bien, nous allons le vérifier en même temps.
Services et bibliothèques pour massliking et massfollowing
Malgré tout ce qui précède, des dizaines de services différents pour le massliking et le suivi de masse vivent et prospèrent (ceux qui sont intéressés peuvent regarder ici , ici ou sur Google eux-mêmes). Cela laisse entendre que le massliking fonctionne de toute façon.
C'est comme avec le sexe. Il semble que tout le monde est engagé, mais il n'est pas accepté de discuter dans une société décente. Encore une fois, vous pouvez trouver des limites empiriquement établies pour le massliking sur Internet. Si le chien robot ne les dépasse pas, il ne doit pas être envoyé à l'interdiction. Pour les comptes jeunes (moins de six mois à compter de la date d'inscription), ce n'est pas plus de 30 likes par heure ou 720 par jour.
Il existe des bibliothèques spéciales pour les pythonistes. Le plus connu est Instapy ( 12k étoiles sur Github, pendant une minute). Il y en a moins connus. À propos, récemment sur Habré, il y avait un article dans lequel une bibliothèque instabot très décente comprend . Mais personnellement, je ne les utiliserais pas "de front" pour le piratage automatique par hashtags. Pour la raison suivante.
Quel est le problème avec les hashtags
, ( Instagram , ).
, , . , , .
, ( ), ! - .
"" . , , . - , - . Object Detection, , SSD .
- , SSD MobileNet v.2, COCO2017. MobileNet, GPU . , 94%.
, SSD python. Github, , , .
import cv2
import json
from datetime import datetime
import requests
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
def id_class_name(class_id, classes):
for key, value in classes.items():
if class_id == key:
return value
#
shortcode = 'CJ.........'
classNames = {}
with open('models/coco2017_labels.txt', 'r+', encoding='utf-8') as file:
for line in file:
key = int(line.split(':')[0])
value = line.split(':')[1]
classNames[key] = value.strip()
COLORS = np.random.uniform(0, 255, size=(len(classNames), 3))
s = requests.session()
r = s.get(f'https://www.instagram.com/p/{shortcode}/?__a=1', headers = {'User-agent': 'bot'})
url = r.json()['graphql']['shortcode_media']['display_resources'][0]['src']
resp = requests.get(url, stream=True)
image = np.asarray(bytearray(resp.content), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
image_height, image_width, _ = image.shape
frame_resized = cv2.resize(image,(300,300))
model = cv2.dnn.readNetFromTensorflow('models/frozen_inference_graph.pb',
'models/ssd_mobilenet_v2_coco_2018_03_29.pbtxt')
model.setInput(cv2.dnn.blobFromImage(frame_resized, size=(300, 300), swapRB=True))
output = model.forward()
detections = output[0, 0, :, :]
detections = detections[detections[:,2].argsort()]
for detection in detections:
confidence = detection[2]
class_id = int(detection[1])
class_name = id_class_name(class_id, classNames)
if (confidence > 0.3):
box_x = int(detection[3] * image_width)
box_y = int(detection[4] * image_height)
box_width = int(detection[5] * image_width)
box_height = int(detection[6] * image_height)
cv2.rectangle(image, (box_x, box_y), (box_width, box_height), COLORS[class_id], thickness=2)
label = class_name + ": " + str(round(confidence, 2))
labelSize, baseLine = cv2.getTextSize(label, cv2.FONT_HERSHEY_DUPLEX, 0.5, 1)
yLeftBottom_ = max(box_y, labelSize[1])
cv2.rectangle(image, (box_x, box_y + labelSize[1]), (box_x + labelSize[0], box_y), COLORS[class_id], cv2.FILLED)
cv2.putText(image, label, (box_x, box_y + labelSize[1] - baseLine//2), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255))
plt.figure(figsize=(8,8))
plt.axis("off")
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
# -
#plt.savefig(f'{shortcode}.png')
OpenCV . , - , pip conda install.
/?__a=1 OpenAPI Instagram. , - , , . , Instagram, .
Il faut dire que les chiens avec une implémentation donnée d'un réseau de neurones ne sont pas toujours définis correctement. Par exemple:
Le fait est que l'angle sur la photo est plutôt inhabituel - le nez du chien ressemble au bec d'un oiseau comme un toucan. Autrement dit, dans des conditions réelles, une partie du contenu approprié sera inévitablement rejetée, le chien robot n'appréciera pas tous les chiens. Mais dans le cadre de la résolution du problème, il est tout à fait possible de le supporter.
À suivre. Dans un proche avenir, je déploierai un robot sur une machine locale, je partirai en voyage, je collecterai des statistiques sur la réponse aux likes et j'écarterai les résultats.