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';
|
|
}
|
|
}
|