测试使用mgp25/instagram-php上传Instagram照片
安装
1 |
composer require mgp25/instagram-php |
上传照片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php set_time_limit(0); date_default_timezone_set('UTC'); require __DIR__.'/vendor/autoload.php'; /////// CONFIG /////// $username = ''; $password = ''; $debug = false; $truncatedDebug = false; ////////////////////// /////// MEDIA //////// $photoFile = '/var/www/instagram/temp_img.png'; $captionText = 'My awesome caption'; ////////////////////// $ig = new \InstagramAPI\Instagram($debug, $truncatedDebug); try { $ig->setUser($username, $password); $ig->login(); } catch (\Exception $e) { echo 'Something went wrong: '.$e->getMessage()."\n"; exit(0); } try { $metadata = ['caption' => $captionText]; $ig->uploadTimelinePhoto($photoFile, $metadata); } catch (\Exception $e) { echo 'Something went wrong: '.$e->getMessage()."\n"; } |
总结
第一次使用API登录会出现checkpoint_required错误,原因是API模拟Android设备登录,会被Instagram判定为异常登录,需要在网页登录后进行短信或邮件确认,之后再次确认异地登录,才能够正常使用API。
官方在example里写的上传photo的实例是错误的,应该使用Wiki里的方法。否则会出现服务器500错误。
上传的照片必须是本地文件,如果是外部文件,需要先缓存到本地。可以使用如下方法
1 2 3 4 5 6 7 8 9 |
/////// MEDIA //////// $remoteFile = 'https://dev.minirplus.com/api/gen_img_placehold.php?size=500x500'; $photoFile = '/var/www/instagram/temp_img.png'; $image = file_get_contents($remoteFile); $fp = fopen($photoFile, 'w'); fwrite($fp, $image); fclose($fp); $captionText = 'My awesome caption'; ////////////////////// |
这样就可以不限于上传本地的照片
Instagram只支持上传比例为0.80至1.91的照片,否则会报错。
比例计算公式
1 |
(original height / original width) x new width = new height |
如果定宽500,按Instagram的比例限制,高度为1/0.8×500至1/1.9×500之间,即高度在263至625之间。
One comment