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
95 lines
2.8 KiB
PHP
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';
|
|
}
|
|
}
|