jonnybarnes.uk/app/Jobs/ProcessLike.php
Jonny Barnes 50facf52de Improve likes
Squashed commit of the following:

commit 4dc223939c31fd5771b9e6895c8e9e0c88fc6663
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 21:19:29 2018 +0000

    update changelog

commit 7b15937a097c12145e60dfec67cad19e385fcb9f
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 21:19:13 2018 +0000

    re-compile frontend assets

commit f533d5e463d06e158b7bedbfd3602af70113acbc
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 21:14:11 2018 +0000

    Only use “by” if there is an author name to show

commit 7b067fd559ce2f4a82ad747a3ebd3474e221169c
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 21:12:27 2018 +0000

    Some styles for the likes page

commit 039523f595115c1329a3939837ebf589184de995
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 21:11:44 2018 +0000

    Add a like with just the url to the seeder

commit c43d4b07936fceeeb59460399a20abec7a9bc3ae
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 20:44:46 2018 +0000

    Add test for the admin cp part of likes

commit eb115fa481319e98bf54a9fa6aa682479e56787d
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 20:44:28 2018 +0000

    Catch 400 errors from a POSSE attempt, its not that important

commit 79f7aa7807534eb76ae57dee72002f99249255b0
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 20:01:19 2018 +0000

    Better fetch data for tweets, attempt to POSSE them back to twitter

commit 1ad078929f918c00db550c0af315677cd991dad6
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 20:00:40 2018 +0000

    Only filter the like content when its actual HTML

commit 10f1ba430d4d5262d28e24ca0413474900ea6145
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 19:59:57 2018 +0000

    Add link to POSSE to twitter via bridgy

commit 7f8e5c6dd39716fb51b5766de2f24c7e01355dbb
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 19:59:22 2018 +0000

    add links in the admin welcome page for likes

commit ebe80b07759881ffb98f8f5117ef25310aaabe6c
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 18:22:35 2018 +0000

    Add the admin routes

commit 5e150a7c39f5d71688b7ef14c924d09ba2ec82ba
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Jan 12 18:22:15 2018 +0000

    Add admin functionality for likes
2018-01-12 21:19:42 +00:00

95 lines
2.8 KiB
PHP

<?php
namespace App\Jobs;
use App\Models\Like;
use GuzzleHttp\Client;
use Illuminate\Bus\Queueable;
use Thujohn\Twitter\Facades\Twitter;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use GuzzleHttp\Exception\ClientException;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Jonnybarnes\WebmentionsParser\Authorship;
use Jonnybarnes\WebmentionsParser\Exceptions\AuthorshipParserException;
class ProcessLike implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $like;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Like $like)
{
$this->like = $like;
}
/**
* Execute the job.
*
* @return void
*/
public function handle(Client $client, Authorship $authorship)
{
if ($this->isTweet($this->like->url)) {
$tweet = Twitter::getOembed(['url' => $this->like->url]);
$this->like->author_name = $tweet->author_name;
$this->like->author_url = $tweet->author_url;
$this->like->content = $tweet->html;
$this->like->save();
//POSSE like
try {
$response = $client->request(
'POST',
'https://brid.gy/publish/webmention',
[
'form_params' => [
'source' => $this->like->url,
'target' => 'https://brid.gy/publish/twitter',
],
]
);
} catch(ClientException $exception) {
//no biggie
}
return 0;
}
$response = $client->request('GET', $this->like->url);
$mf2 = \Mf2\parse((string) $response->getBody(), $this->like->url);
if (array_has($mf2, 'items.0.properties.content')) {
$this->like->content = $mf2['items'][0]['properties']['content'][0]['html'];
}
try {
$author = $authorship->findAuthor($mf2);
if (is_array($author)) {
$this->like->author_name = array_get($author, 'properties.name.0');
$this->like->author_url = array_get($author, 'properties.url.0');
}
if (is_string($author) && $author !== '') {
$this->like->author_name = $author;
}
} catch (AuthorshipParserException $exception) {
return 1;
}
$this->like->save();
}
private function isTweet(string $url): bool
{
$host = parse_url($url, PHP_URL_HOST);
$parts = array_reverse(explode('.', $host));
return $parts[0] === 'com' && $parts[1] === 'twitter';
}
}