Module code thus far
This commit is contained in:
parent
705d8b315b
commit
81c9e1fde6
26
README.md
26
README.md
|
@ -1,2 +1,28 @@
|
||||||
# StatusCafe.pm
|
# StatusCafe.pm
|
||||||
|
Perl module to fetch content directly from [status.cafe](https;//status.cafe)
|
||||||
|
|
||||||
|
I wanted to create a custom widget on my Mojolicious site listing off my status from status.cafe, so I wrote this module to fetch the info by directly scraping the given user's page. There's not really any reason I did that over Atom feed parsing, however!
|
||||||
|
|
||||||
|
This isn't a proper Perl module yet that can be put on the CPAN; for now what I've personally been doing is using it under the `Model` namespace in the Mojolicious project I mentioned above. I plan on turning it into a proper CPAN module at a later date.
|
||||||
|
|
||||||
|
## How to use
|
||||||
|
|
||||||
|
```Perl
|
||||||
|
use utf8;
|
||||||
|
use StatusCafe;
|
||||||
|
|
||||||
|
my ($emoji, $timeAgo, $content) = statuscafe('m15o');
|
||||||
|
```
|
||||||
|
|
||||||
|
NOTE: You might want to set up some form of caching so it doesn't need refetched every time the script is triggered
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- HTTP::Tiny (for page fetching)
|
||||||
|
- Mojo::DOM (for parsing the fetched page for necessary info)
|
||||||
|
- Mojo::Util (so Mojo::DOM doesn't throw a fit over emoji usage)
|
||||||
|
|
||||||
|
## To-do
|
||||||
|
|
||||||
|
- Add an optional flag to output emoji information as text instead of an actual emoji, since that's easier to handle
|
||||||
|
- As mentioned above, modify into a proper module to be uploaded to CPAN
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
package StatusCafe;
|
||||||
|
|
||||||
|
use utf8;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use HTTP::Tiny;
|
||||||
|
use Mojo::DOM;
|
||||||
|
use Mojo::Util;
|
||||||
|
|
||||||
|
use Exporter qw(import);
|
||||||
|
our @EXPORT = qw(statuscafe);
|
||||||
|
|
||||||
|
sub statuscafe {
|
||||||
|
# fetch DOM from status.cafe
|
||||||
|
my $_response =
|
||||||
|
HTTP::Tiny->new(keep_alive => 0)->get('https://status.cafe/users/' . $_[0]);
|
||||||
|
return "$_response->{status} $_response->{reason}"
|
||||||
|
unless $_response->{success};
|
||||||
|
bless $_response, __PACKAGE__;
|
||||||
|
my $_dom =
|
||||||
|
Mojo::DOM->new->parse(Mojo::Util::decode('UTF-8', $_response->{content}));
|
||||||
|
|
||||||
|
# get the relevant text from the latest status
|
||||||
|
my $_info =
|
||||||
|
$_dom->find('div.status-username')->first->all_text;
|
||||||
|
my $_content =
|
||||||
|
$_dom->find('p.status-content')->first->all_text;
|
||||||
|
|
||||||
|
# now turn $_info into a form we can use more easily
|
||||||
|
my ($_emoji) =
|
||||||
|
$_info =~
|
||||||
|
/[\p{Emoji}\p{EMod}\p{EComp}\p{EBase}\p{EPres}\p{Emoticons}\p{ExtPict}]/g;
|
||||||
|
my ($_ago) =
|
||||||
|
$_info =~ /((\d{1,4})\s([a-z\s]{1,}))$/g;
|
||||||
|
|
||||||
|
return ($_emoji, $_ago, $_content);
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
Loading…
Reference in New Issue