create account

How to build a preferential steem upvote bot using php by akintunde

View this thread on: hive.blogpeakd.comecency.com
· @akintunde · (edited)
$64.54
How to build a preferential steem upvote bot using php
#### What Will I Learn?
- You will learn how to build an upvote bot (with preference)  using steem sc2-sdk-php

#### Requirements
- You will need to have PHP powered  server with openSSL 
- You will need to Install https://github.com/hernandev/sc2-sdk-php/
You can do that via composer using these commands `composer require hernandev/sc2-sdk-php`
- You will need to have a steemconnect registered app

#### Difficulty

- Intermediate


#### Tutorial Contents
Make sure you have followed all necessary requirements above before reading these tutorial. There is a big possibility that this tutorial might not work at all on your localhost even if you use a SELF-SIGNED SSL certificates as only self-signed certificates can work on  localhosts. There is a class called "GUZZLE" that sc2-sdk-php works with. This class only works with verified certificates except when otherwise manually edited.

So before I start this tutorial, I will offer a little fix on that, so you can easily work from your localhost, this fix is important,as there does not seem to be a straight forward way of working with sc2-sdk-php unless this fix is done.

## THE FIX
Provided you have installed sc2-sdk-php via composer , follow the procedures below:

- ENTER this address in the file explorer `C:\wamp\www\bb\vendor\guzzlehttp\guzzle\src\Handler`
Edit the above address according to the location of your PUBLICHTML and location of PHP SERVER.
You should see a list of different folders
- Edit `CurlFactory.php`
- Go to line 332 & 333  and edit the lines as stated below
```php
 $conf[CURLOPT_SSL_VERIFYHOST] = 0; //previously 2
 $conf[CURLOPT_SSL_VERIFYPEER] = false; // previously true
 ```
 <hr>
 Once this is done, the authentication will no longer be verified.
 Now, we can  start the tutorial.

## THE TUTORIAL
 - Go to the root of the folder where sc2-sdk-php  was installed (where the vendor folder is located)
 - Create a new file there and name it `index.php`. Our upvote bot is going to be located here.
  
### STEP  1 - Open the PHP TAG and add the following codes as stated below
```php
 <?php
 ini_set('max_execution_time', 6000);
include('vendor/autoload.php');
use SteemConnect\Config\Config;
use SteemConnect\Client\Client;
use SteemConnect\Operations\Comment;
use SteemConnect\Operations\CommentOptions;
use SteemConnect\Operations\Vote;
// oauth client id.
$clientId = 'your-app-name';
// oauth client secret.
$clientSecret = 'app-secret-key';
// return url.
$returnUrl = 'https://localhost/vote';
// list of required scopes.
$scopes = [
    'login', 'offline', 'vote', 'comment', 'comment_delete',
    'comment_options', 'custom_json', 'claim_reward_balance',
];
// starts the configuration object, passing the client id and secret.
$config = new Config($clientId, $clientSecret);
// configure the return / callback URL.
$config->setReturnUrl($returnUrl);
// set the reqired scopes.
$config->setScopes($scopes);
// set the return/callback URL, so SteemConnect will redirect
// users back to your application.
$config->setReturnUrl('https://localhost/bb');
$sdk = new Client($config);
// get the URL to send the users that will authorize your app.
$redirectUrl = $sdk->auth()->getAuthorizationUrl();
if (empty($_GET['code'])){
// now redirect the user:
header('Location: '.$redirectUrl);
}
// exchanging the authorization code by a access token.
$token = $sdk->auth()->parseReturn();
// set the Token instance on the SDK instance.
$sdk->setToken($token);
 ```
> All the above contains configuration processes for sc2-sdk-php

<hr>
 `ini_set('max_execution_time', 6000);` : This will increase the execution time of the script beyond the PHP.INI defaults ,an upvote bot takes time to process as this script is gonna take into account  the STEEM BLOCKCHAIN time interval of 20 secs between simultaneous upvotes.
<hr>
 `include('vendor/autoload.php');` : This will help include all the sc2-sdk-php classes and helper classes**
<hr>
`use SteemConnect\Config\Config;` : This helps with configuring the Connection<hr>
use SteemConnect\Client\Client; : This helps with CLient Class<hr>
`use SteemConnect\Operations\Comment;`,`use SteemConnect\Operations\Vote;`: All these are used comment and voting operations<hr>
<hr>
The rest of the configuration codes can be understood from the comment and you can also sc2-sdk-php to see how it works.

#### NOTE
`if (empty($_GET['code'])){' : This IF statement is an antidote for redirection issues that can occur, also make sure that the $returnurl is the same as the address of the script. There might be an error if it is not, also the return url must be included in the list of REDIRECT URIs on your SteemConnect APP page (you should know that).


### BOT PROCESS

#### Step 1:
```php

$chosen = array("user1","user2","user3");
```
This represents the set of votee that needs to be upvoted by the bot, this is good for accounts that are jointly owned for the single purpose of upvoting a certain set of people. There are a lot of accounts like that on steem.  Populate the array with as much name as you want.

#### Step 2:
```php
$voter = 'upvoter';
$loyal = 'upvoter';
 $query = urlencode('{"tag":".$loyal.", "limit": "100"}');
$url = 'https://api.steemjs.com/get_discussions_by_blog?query='.$query;
$json= file_get_contents($url);
$postData = json_decode($json,true);
```
`$voter` represents the account that will be responsible for voting.
This bot only upvotes users that upvote the last post of a particular account. That account is represented with `$loyal`

The last lines queries the steem blockchain and returns the json equivalents of $loyal's last post and then decodes it into a total array. Without the `true` argument on the last line, the $postData will still contain sub-jsons in each multi-level array.

### STEP 3
```php
$n = 0;
foreach ($postData as $item){ 
if ($voter == $item["author"] && $n < 1){
	$votee = array();
	$a = 0;
	foreach ($item["active_votes"] as $itemVoter){	
		if (in_array($itemVoter['voter'],$chosen)){$votee[$a] = $itemVoter['voter']; $a++;}	
		$n++;		
	}
}
}
```

This gets the list of voters from the $postData and checks it against the $chosen votee so as not vote `outsiders`.

### STEP 4:
```php
foreach ($votee as $v){
 $query = urlencode('{"tag":"'.$v.'", "limit": "100"}');
$url = 'https://api.steemjs.com/get_discussions_by_blog?query='.$query;
$json= file_get_contents($url);
$postData2 = json_decode($json,true);
$n2 =0;
foreach ($postData2 as $item2){ 
if ($v == $item2["author"] && $n2 < 1){
    $link=  $item2['permlink'];
	$d =0;
	$zlist = array();
	foreach ($item2["active_votes"] as $z){
		$zlist[$d] = $z['voter'];
		$d++;	
	}
$n2++;	
}
}
if (!in_array($voter,$zlist)){	
$body = 'Congratulations!,@'.$v.' You have been upvoted';
// upvoting / downvoting a post:
$vote = new Vote();
$p = 45*100;
$vote
    ->account($voter)
    ->on($v,$link)
    ->upVote($p);    
$comment = new Comment();
$comment
    ->reply($v,$link)
	->permlink($link)
	->author($voter)
    ->body($body);
echo $v.'<br/>';
// the broadcast method magically accept any number of arguments, so broadcasting multiple operations is easily accomplished.
if ($sdk->broadcast($vote)){echo 'Vote  Made Successfully<br/><br/>';}

// the broadcast method magically accept any number of arguments, so broadcasting multiple operations is easily accomplished.
if ($sdk->broadcast($comment)){echo 'Comment Made Successfully<br/>';}
sleep(25);
}
}
```
This last foreach performs the whole operation of Upvoting and commenting <hr>
The first six lines gets the first post of the verified votee , gotten from the previous foreach. <hr>
The nex foreach (`foreach ($item2["active_votes"] as $z){......if (!in_array($voter,$zlist)){`)  gets all the voters on the votee post and then checks if the post has not been upvoted before to avoid error which will be generated if the script votes an already voted post.<hr>
Then the $body of the comment and the percentage ($p) is set which is then prepared with $vote and $comment class initializations. <hr>
After this, $sdk->broadcast($comment) & $sdk->broadcast($vote)  broadcast the operation ,meaning the operation is sent into the blockchain via sc2-sdk-php

The SLEEP(25) is there to make sure there is a gap between each upvote, an error will be generated if there is less than 20 seconds time frame between each upvote.

Because of these timeframe, these script can take time to finish.

### Now, let's get the whole script.

```php
<?php
ini_set('max_execution_time', 1000);
include('vendor/autoload.php');
// alias the Config class.
use SteemConnect\Config\Config;
use SteemConnect\Client\Client;
use SteemConnect\Operations\Comment;
use SteemConnect\Operations\CommentOptions;
use SteemConnect\Operations\Vote;
// oauth client id.
$clientId = 'your-app-name';
// oauth client secret.
$clientSecret = 'app-secret-key';
// return url.
$returnUrl = 'https://localhost/bb';
// list of required scopes.
$scopes = [
    'login', 'offline', 'vote', 'comment', 'comment_delete',
    'comment_options', 'custom_json', 'claim_reward_balance',
];
// starts the configuration object, passing the client id and secret.
$config = new Config($clientId, $clientSecret);
// configure the return / callback URL.
$config->setReturnUrl($returnUrl);
// set the reqired scopes.
$config->setScopes($scopes);
// set the return/callback URL, so SteemConnect will redirect
// users back to your application.
$config->setReturnUrl('https://localhost/bb');
$sdk = new Client($config);
// get the URL to send the users that will authorize your app.
$redirectUrl = $sdk->auth()->getAuthorizationUrl();
if (empty($_GET['code'])){
// now redirect the user:
header('Location: '.$redirectUrl);
}
// exchanging the authorization code by a access token.
$token = $sdk->auth()->parseReturn();
// set the Token instance on the SDK instance.
$sdk->setToken($token);
$chosen = array("user1","user2","user3");
$voter = "upvoter';
$loyal= 'upvoter';
   $query = urlencode('{"tag":"'.$loyal.'", "limit": "100"}');
$url = 'https://api.steemjs.com/get_discussions_by_blog?query='.$query;
$json= file_get_contents($url);
$postData = json_decode($json,true);
$n = 0;
foreach ($postData as $item){ 
if ($voter == $item["author"] && $n < 1){
	$votee = array();
	$a = 0;
	foreach ($item["active_votes"] as $itemVoter){
		if (in_array($itemVoter['voter'],$chosen)){$votee[$a] = $itemVoter['voter']; $a++;}
		$n++;	
	}
}
}
foreach ($votee as $v){
 $query = urlencode('{"tag":"'.$v.'", "limit": "100"}');
$url = 'https://api.steemjs.com/get_discussions_by_blog?query='.$query;
$json= file_get_contents($url);
$postData2 = json_decode($json,true);
$n2 =0;
foreach ($postData2 as $item2){ 
if ($v == $item2["author"] && $n2 < 1){
    $link=  $item2['permlink'];
	$d =0;
	$zlist = array();
	foreach ($item2["active_votes"] as $z){
		$zlist[$d] = $z['voter'];
		$d++;		
	}
$n2++;	
}
}
if (!in_array($voter,$zlist)){	
$body = 'Congratulations!,@'.$v;
// upvoting / downvoting a post:
$vote = new Vote();
$p = 45*100;
$vote
    ->account($voter)
    ->on($v,$link)
    ->upVote($p);
$comment = new Comment();
$comment
    ->reply($v,$link)
	->permlink($link)
	->author($voter)
    ->body($body);
	echo $v.'<br/>';
// the broadcast method magically accept any number of arguments, so broadcasting multiple operations is easily accomplished.
if ($sdk->broadcast($vote)){echo 'Vote  Made Successfully<br/><br/>';}
// the broadcast method magically accept any number of arguments, so broadcasting multiple operations is easily accomplished.
if ($sdk->broadcast($comment)){echo 'Comment Made Successfully<br/>';}
sleep(25);
}
}
```
<br/>

With this, you can now run the script from your browser. This bot still needs to be run the first time before it can now run on its own , this is to authenticate the $voter .

You can find the codes  of this tutorial via this [github link](https://github.com/Akintunde102/PHP-STEEM-BOT)

<br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@akintunde/how-to-build-a-preferential-steem-upvote-bot-using-php">Utopian.io -  Rewarding Open Source Contributors</a></em><hr/>
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 52 others
properties (23)
authorakintunde
permlinkhow-to-build-a-preferential-steem-upvote-bot-using-php
categoryutopian-io
json_metadata"{"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":1903522,"name":"php-src","full_name":"php/php-src","html_url":"https://github.com/php/php-src","fork":false,"owner":{"login":"php"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","php","open-source","steemdev","wafrica"],"links":["https://github.com/hernandev/sc2-sdk-php/","https://github.com/Akintunde102/PHP-STEEM-BOT","https://utopian.io/utopian-io/@akintunde/how-to-build-a-preferential-steem-upvote-bot-using-php"],"moderator":{"account":"deathwing","time":"2018-04-11T10:49:14.524Z","pending":false,"reviewed":true,"flagged":false},"questions":null,"score":null,"total_influence":null,"staff_pick":null,"config":{"questions":[{"question":"Does the tutorial address a minimum of 3 substantial concepts and no more than 5?","question_id":"tut-1","answers":[{"answer":"3-5 substantial concepts covered in the tutorial.","answer_id":1,"value":10},{"answer":"Less than 3 or more than 5 substantial concepts covered in the tutorial.","answer_id":2,"value":5},{"answer":"No substantial or recognisable concepts.","answer_id":3,"value":0}]},{"question":"Concepts covered in the tutorial are indicated in the post text with a short description of each concept and when appropriate, images?","question_id":"tut-2","answers":[{"answer":"Thorough text and images for concepts covered.","answer_id":1,"value":10},{"answer":"Minimal text and images.","answer_id":2,"value":5},{"answer":"No or very little text and images.","answer_id":3,"value":0}]},{"question":"Does the contributor provide supplementary resources, such as code and sample files in the contribution post or a GitHub repository?","question_id":"tut-3","answers":[{"answer":"Yes","answer_id":1,"value":10},{"answer":"No","answer_id":2,"value":0}]},{"question":"Is the tutorial part of a series?","question_id":"tut-4","answers":[{"answer":"Yes.","answer_id":1,"value":10},{"answer":"Yes, but first entry in the series.","answer_id":2,"value":5},{"answer":"No.","answer_id":3,"value":0}]},{"question":"Is there an outline for the tutorial content at the beginning of the post?","question_id":"tut-5","answers":[{"answer":"Yes.","answer_id":1,"value":10},{"answer":"Yes, but not detailed enough or does not cover all sections.","answer_id":2,"value":5},{"answer":"No.","answer_id":3,"value":0}]},{"question":"Does the writing style meet the Utopian standard considering formalness, informativeness and clarity of the content?","question_id":"c-1","answers":[{"answer":"It is formal, informative and well written with clear content.","answer_id":1,"value":10},{"answer":"It is informative with clear content but not formal enough.","answer_id":2,"value":5},{"answer":"The contribution could be more informative or contains unrelated information, formality and clarity of the content are good enough.","answer_id":3,"value":4},{"answer":"Not all sections were clear enough but overall holds value for the project.","answer_id":4,"value":2},{"answer":"Not at all.","answer_id":5,"value":0}]},{"question":"Was the provided category template for the editor followed?","question_id":"c-2","answers":[{"answer":"All points of the template were included with additional points as well.","answer_id":1,"value":5},{"answer":"The template was followed without additions.","answer_id":2,"value":4},{"answer":"The template was edited but the points were covered in different way.","answer_id":3,"value":3},{"answer":"Not all points of the template were covered in the contribution but the structure is clear enough.","answer_id":4,"value":3},{"answer":"The template was not followed but the structure is clear enough.","answer_id":5,"value":2},{"answer":"The contents are not clearly structured at all.","answer_id":6,"value":0}]},{"question":"Did the contributor tag other users?","question_id":"c-3","answers":[{"answer":"No other users were tagged by the contributor.","answer_id":1,"value":5},{"answer":"Used tags are reasonable and all tagged people are connected to the project and/or the contribution.","answer_id":2,"value":5},{"answer":"The contribution contains mentions of other users that are not directly related to the contribution but related in other ways.","answer_id":3,"value":2},{"answer":"The contributor misuses tagging of other users.","answer_id":4,"value":0}]},{"question":"Did the contributor ask for upvotes, resteems, follows or witness vote?","question_id":"c-4","answers":[{"answer":"No","answer_id":1,"value":5},{"answer":"Yes, but not in a way that disturbs readability. ","answer_id":2,"value":5},{"answer":"Yes.","answer_id":3,"value":0}]},{"question":"Was a graphical content like images, charts, videos or screenshots included?","question_id":"c-5","answers":[{"answer":"Yes, the graphical content is included and adds more value to the contribution.","answer_id":1,"value":5},{"answer":"No but the contribution works well without graphical content well.","answer_id":2,"value":4},{"answer":"Yes, but most of the graphical content’s purpose is just for presentational matters.","answer_id":3,"value":3},{"answer":"No relevant or useful graphical content is included in the contribution.","answer_id":4,"value":0}]},{"question":"How would you rate the overall added value?","question_id":"c-6","answers":[{"answer":"Extraordinary value to both the project and the open source community overall.","answer_id":1,"value":20},{"answer":"Significant value to the project or open source community.","answer_id":2,"value":15},{"answer":"Some value to the project or open source community.","answer_id":3,"value":10},{"answer":"Little value to the project or open source community.","answer_id":4,"value":5},{"answer":"No obvious value to project or open source community.","answer_id":5,"value":0}]}]}}"
created2018-04-08 13:49:39
last_update2018-04-11 10:49:15
depth0
children8
last_payout2018-04-15 13:49:39
cashout_time1969-12-31 23:59:59
total_payout_value45.035 HBD
curator_payout_value19.501 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length12,055
author_reputation16,541,536,778,040
root_title"How to build a preferential steem upvote bot using php"
beneficiaries
0.
accountutopian.pay
weight2,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id48,973,833
net_rshares17,627,816,187,382
author_curate_reward""
vote details (116)
@friendly-fenix ·
Thanks for sharing this @akintunde, I have not messed around with any PHP since a very very long time ago... So I don't understand much but maybe I should try to get into it again...
properties (22)
authorfriendly-fenix
permlinkre-akintunde-how-to-build-a-preferential-steem-upvote-bot-using-php-20180408t140342395z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"users":["akintunde"],"app":"steemit/0.1"}
created2018-04-08 14:03:42
last_update2018-04-08 14:03:42
depth1
children1
last_payout2018-04-15 14:03:42
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length182
author_reputation6,283,336,485,983
root_title"How to build a preferential steem upvote bot using php"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id48,975,671
net_rshares0
@akintunde ·
That would be nice. Looking forward to that.
properties (22)
authorakintunde
permlinkre-friendly-fenix-re-akintunde-how-to-build-a-preferential-steem-upvote-bot-using-php-20180408t142237391z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-04-08 14:22:42
last_update2018-04-08 14:22:42
depth2
children0
last_payout2018-04-15 14:22:42
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length44
author_reputation16,541,536,778,040
root_title"How to build a preferential steem upvote bot using php"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id48,978,220
net_rshares0
@mosunomotunde ·
Brilliant!
properties (22)
authormosunomotunde
permlinkre-akintunde-how-to-build-a-preferential-steem-upvote-bot-using-php-20180408t212903627z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"busy","app":"busy/2.4.0"}
created2018-04-08 21:29:21
last_update2018-04-08 21:29:21
depth1
children1
last_payout2018-04-15 21:29:21
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length10
author_reputation19,586,987,821,353
root_title"How to build a preferential steem upvote bot using php"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id49,031,480
net_rshares0
@akintunde ·
Thank you ma
properties (22)
authorakintunde
permlinkre-mosunomotunde-re-akintunde-how-to-build-a-preferential-steem-upvote-bot-using-php-20180409t160700030z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-04-09 16:07:03
last_update2018-04-09 16:07:03
depth2
children0
last_payout2018-04-16 16:07:03
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length12
author_reputation16,541,536,778,040
root_title"How to build a preferential steem upvote bot using php"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id49,160,649
net_rshares0
@reachout ·
Congratulations!,@akintunde Your post has been upvoted by Reach Out, which is proudly sponsored by @eturnerx. Our goal is to support Nigerian minnows...
Congratulations!,@akintunde Your post has been upvoted by Reach Out, which is proudly sponsored by @eturnerx. Our goal is to support Nigerian minnows on Steemit. Join our discord group https://discord.gg/NWAkKfn<br/>
Benefactor : @bleepcoin <br/>
Curator On Duty: Richie, the Manual Bot <br/>
We invite you to the @eoscafe community [https://discord.gg/wdUnCdE]
properties (22)
authorreachout
permlinkhow-to-build-a-preferential-steem-upvote-bot-using-php
categoryutopian-io
json_metadata[]
created2018-04-09 00:30:06
last_update2018-04-09 00:30:06
depth1
children0
last_payout2018-04-16 00:30:06
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length361
author_reputation551,058,650,780
root_title"How to build a preferential steem upvote bot using php"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id49,047,834
net_rshares0
@utopian-io ·
### Hey @akintunde I am @utopian-io. I have just upvoted you!
#### Achievements
- Seems like you contribute quite often. AMAZING!
#### Utopian Witness!
<a href="https://discord.gg/zTrEMqB">Participate on Discord</a>. Lets GROW TOGETHER!
- <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for my Witness</a>
- <a href="https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1">Proxy vote to Utopian Witness</a>

**Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x**
properties (22)
authorutopian-io
permlinkre-akintunde-how-to-build-a-preferential-steem-upvote-bot-using-php-20180411t122254527z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-04-11 12:22:54
last_update2018-04-11 12:22:54
depth1
children0
last_payout2018-04-18 12:22:54
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length636
author_reputation152,955,367,999,756
root_title"How to build a preferential steem upvote bot using php"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id49,484,469
net_rshares0
@wizzydayo ·
Hello @akintunde ... I'm a PHP developer in Uyo, Nigeria. I have always wanted to build some cool tools on the steem blockchain using PHP preferably with the Laravel Framework.   
  I believe this tutorial will help me alot on getting thee basic concepts. Thank YOU for this  
properties (22)
authorwizzydayo
permlinkre-akintunde-how-to-build-a-preferential-steem-upvote-bot-using-php-20180416t233009317z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-04-16 23:30:18
last_update2018-04-16 23:30:18
depth1
children0
last_payout2018-04-23 23:30:18
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length276
author_reputation2,325,044,616
root_title"How to build a preferential steem upvote bot using php"
beneficiaries
0.
accountutopian.pay
weight1,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id50,464,147
net_rshares0
@wizzydayo ·
Hello @akintunde ... I'm a PHP developer in Uyo, Nigeria. I have always wanted to build some cool tools on the steem blockchain using PHP preferably with the Laravel Framework.   
  I believe this tutorial will help me alot on getting thee basic concepts. Thank YOU for this  
properties (22)
authorwizzydayo
permlinkre-akintunde-how-to-build-a-preferential-steem-upvote-bot-using-php-20180416t234021025z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-04-16 23:40:33
last_update2018-04-16 23:40:33
depth1
children0
last_payout2018-04-23 23:40:33
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length276
author_reputation2,325,044,616
root_title"How to build a preferential steem upvote bot using php"
beneficiaries
0.
accountutopian.pay
weight1,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id50,465,268
net_rshares0