挑戦する
タグで写真を見つけて好きになるロボット(MySQl + php + js)を作成します。 さらに、ロボットが禁止に入らないことが望ましいです。
ログイン
まず、ログインする必要があります。 したがって、ロボットのメインページにはボタンリンクが1つしかありません。
<a href="https://api.instagram.com/oauth/authorize/?client_id=_id&redirect_uri=_____&response_type=code&scope=basic+comments+relationships+likes"><img src="img/logo.png"></a>
そして最初に、訪問者が以前に私たちを許可していないかどうかを確認し(クッキーを確認します)、そうであれば、あなたの個人アカウントにリダイレクトします。
if ($_COOKIE['sess_id']!="") header('location: ');
以下はスクリプトの内容です。データを処理する許可を私たちに与えた後、ここに来ます。 最初に接続されたconfig.phpファイルは、データベースへの接続を確立します
// include 'config.php'; // , if ($_GET['error']=='access_denied') header('location: ___'); else { if ($_GET['code']!="") { // $ClientID = '__'; $ClientSecret = '__'; $uri = '___'; $url = "https://api.instagram.com/oauth/access_token"; $access_token_parameters = array( 'client_id' => $ClientID, 'client_secret' => $ClientSecret, 'grant_type' => 'authorization_code', 'redirect_uri' => $uri, 'code' => $_GET['code'] ); $curl = curl_init($url); curl_setopt($curl,CURLOPT_POST,true); curl_setopt($curl,CURLOPT_POSTFIELDS,$access_token_parameters); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); curl_close($curl); $data = json_decode($data, true); $token = $data['access_token']; $full_name = $data['user']['full_name']; $username = $data['user']['username']; $profile_picture = $data['user']['profile_picture']; $id = $data['user']['id']; if ($id!="") { // ? $nashelsy = 0; $sql = mysql_query("SELECT*FROM qf_users Where qf_id='".$id."' LIMIT 1"); while($record = mysql_fetch_array($sql)) $nashelsy = 1; // id $sess_id = md5(md5($id).$_SERVER['REMOTE_ADDR']); if ($nashelsy==0) { // , $sql = mysql_query("INSERT INTO `qf_users` (`qf_id`, `qf_token`, `qf_username`, `qf_full_name`, `qf_profile_picture`, `qf_sess_id`, `qf_ip`) VALUES ('".$id."', '".$token."', '".$username."', '".$full_name."', '".$profile_picture."', '".$sess_id."', '".$_SERVER['REMOTE_ADDR']."');"); } else { // , $sql1 = mysql_query("UPDATE `qf_users` SET `qf_token` = '".$token."', `qf_username` = '".$username."', `qf_full_name` = '".$full_name."', `qf_profile_picture` = '".$profile_picture."', `qf_ip` = '".$_SERVER['REMOTE_ADDR']."', `qf_sess_id` = '".$sess_id."' WHERE `qf_users`.`qf_id` = '".$id."' LIMIT 1 ;"); } // , setcookie('sess_id',$sess_id,time()+86400,'/','_'); header('location: __'); } } }
個人アカウントに移動します
そのようなユーザーがいるかどうかを確認し、ない場合はメインのユーザーに送信します。
include 'config.php'; $sql = mysql_query("SELECT*FROM qf_users WHERE qf_sess_id='".$_COOKIE['sess_id']."'"); while($record = mysql_fetch_array($sql)) { $user_id = $record['qf_id']; $user_token = $record['qf_token']; $user_email = $record['qf_email']; $user_username = $record['qf_username']; $user_full_name = $record['qf_full_name']; $user_profile_picture = $record['qf_profile_picture']; $user_ip = $record['qf_ip']; } if (md5(md5($user_id).$_SERVER['REMOTE_ADDR'])!=$_COOKIE['sess_id']) { setcookie('sess_id',$_COOKIE['sess_id'],time()-3600,'/',''); header('location: '); }
かなり原始的な認証ですが、私以外は誰もサービスを使用しないとすぐに想定されていたため、問題はないはずです。
ページ自体には、タグを入力するための、写真のいいねの最大数を入力するためのいくつかのフィールドのみがあります(数が多い写真は意味がないため、「Let's Go」ボタンと「Exit」ボタンは好きではありません) ")。 次の写真のIDを保存するフィールドも必要です。
<table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="left" valign="bottom"> <input name="tag" id="tag" type="text" placeholder=' '> <input name="kollikes" id="kollikes" type="number" value="40"> <span style="display:inline-block; border:1px solid black; padding:5px; cursor:pointer" onClick="gogogo()" id="bb">!</span> <hr> <input name="last_id" id="last_id" type="text" placeholder=''> </td> <td align="right" valign="bottom"> <img src="" height="30"> <?=$user_full_name?> / <a href="logout.php"></a></td> </tr> </table>
何が起こっているかを観察するために、divを忘れないでください
<div id="res" align="center"></div>
さらに、ロジックは単純であり、普通の人の行動を模倣する必要があります。そうしないと、ロボットはかなり速く動きが取れなくなり、すべての作業が無駄になります。 したがって、次のコードをページに追加します(すべてのタイムアウトは任意に選択できます)。
<script> var rep = 0; setInterval(function() { if (rep==1) gogogo(); },3000); function gogogo() { rep = 0; $('#res').text('... ...'); $('#bb').text('...'); $.post('getphoto.php',{token:'<?=$user_token?>',tag:tag.value,kollikes:kollikes.value,last_id:last_id.value}, function (data) { arr = data.split('(@-a4h-@)'); $('#title').text(arr[0]); $('#mylink').attr('href',arr[1]); $('#myimg').attr('src',arr[2]); myid.value = arr[3]; last_id.value=arr[4]; $('#bb').text('like'); $('#res').text('... ...'); setTimeout(function() { $.post('like.php',{id:myid.value,token:'<?=$user_token?>'}, function (data) { arr = data.split('<-=a4h=->'); $('#res').html(arr[0]+"<br>"+arr[1]); if (arr[0]==200) rep=1; }); }, Math.floor(Math.random() * (6000 - 3000) + 3000)); }); } </script>
写真を探して、いいね!
タグで写真を検索
このスクリプトはセパレータを含む行を形成し、セパレータが渡されて解析されます。
$user_token = $_POST['token']; $images = 0; $title = ''; $src = ''; $link = ''; $like = 0; $im_id = ''; $last_id = $_POST['last_id']; while ($images==0) { if ($last_id!="") $api = 'https://api.instagram.com/v1/tags/'.$_POST['tag'].'/media/recent?max_tag_id='.$last_id.'&count=1&access_token='.$user_token; else $api = 'https://api.instagram.com/v1/tags/'.$_POST['tag'].'/media/recent?count=1&access_token='.$user_token; $response = file_get_contents($api); $last_id = htmlspecialchars(json_decode($response)->pagination->next_max_tag_id); foreach(json_decode($response)->data as $item){ $title = $item->caption->text; $src = $item->images->low_resolution->url; $link = $item->link; $like = $item->likes->count; $im_id = $item->id; if ($like < $_POST['kollikes']) { $images = 1; echo htmlspecialchars($title)."(@-a4h-@)".htmlspecialchars($link)."(@-a4h-@)".htmlspecialchars($src)."(@-a4h-@)".htmlspecialchars($im_id)."(@-a4h-@)".$last_id; } } }
いいね!
ここではまだ簡単です
<?php $id = $_POST['id']; $user_token = $_POST['token']; $url = "https://api.instagram.com/v1/media/".$id."/likes"; $access_token_parameters = array( 'access_token' => $user_token ); $curl = curl_init($url); curl_setopt($curl,CURLOPT_POST,true); curl_setopt($curl,CURLOPT_POSTFIELDS,$access_token_parameters); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); curl_close($curl); $data = json_decode($data, true); $result = $data['meta']['code']; $result2 = $data['meta']['error_message']; echo $result."<-=a4h=->".$result2; ?>
利益
コードは完璧ではなく、膝の上に組み立てられています。主なアイデアは、制裁に陥らないように、生きている人の行動を模倣する方法を示すことでした。
デモ