mirror of https://github.com/ooguz/pfxposter
commit
7ad08dec17
|
@ -13,10 +13,10 @@ A PixelFed to Mastodon and Twitter crossposter that is not written as intended.
|
||||||
In order to post PixelFed entries to Twitter, you will need a Mastodon-Twitter crossposter, you may find them on web.
|
In order to post PixelFed entries to Twitter, you will need a Mastodon-Twitter crossposter, you may find them on web.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```
|
```
|
||||||
pip3 install pfxposter
|
python3 -m pip install pfxposter
|
||||||
```
|
```
|
||||||
|
Using virtual enviroment is strongly recommended, for the reason that the requests library of the distro vendor may be overrided after the installation.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
updated = 2020-08-24 00:00:00+00:00
|
updated = 1970-01-01T00:00:00+00:00
|
||||||
|
|
||||||
[mastodon]
|
[mastodon]
|
||||||
mastodon_url = "https://oyd.social"
|
mastodon_url = "https://oyd.social"
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
#!/usr/bin/env python3
|
from .poster import *
|
||||||
|
|
||||||
from .pfxposter import *
|
|
||||||
|
|
||||||
__version__ = '0.1.2'
|
|
||||||
|
|
||||||
|
|
||||||
|
__version__ = '0.1.6'
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
from . import poster
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
poster.main()
|
|
@ -1,55 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
from mastodon import Mastodon
|
|
||||||
import requests
|
|
||||||
import atoma
|
|
||||||
import re
|
|
||||||
import tempfile
|
|
||||||
import toml
|
|
||||||
import os
|
|
||||||
|
|
||||||
homedir = os.getenv("HOME")
|
|
||||||
config_file = "{}/.pfxposter".format(homedir)
|
|
||||||
|
|
||||||
if os.path.exists(config_file) == False:
|
|
||||||
conf_includes = 'updated = 2020-08-24 00:00:00+00:00\n\n[mastodon]\nmastodon_url = "https://oyd.social"\naccess_token = "your_access_token_here"\n\n[pixelfed]\npixelfed_url = "https://pixelfed.social"\nusername = "username"'
|
|
||||||
with open(config_file, "w") as f:
|
|
||||||
f.write(conf_includes)
|
|
||||||
print("Configuration file created please edit")
|
|
||||||
os._exit(0)
|
|
||||||
|
|
||||||
config = toml.load(config_file)
|
|
||||||
|
|
||||||
username = config['pixelfed']['username']
|
|
||||||
last_updated = config['updated']
|
|
||||||
|
|
||||||
mastodon = Mastodon(
|
|
||||||
access_token = config['mastodon']['access_token'],
|
|
||||||
api_base_url = config['mastodon']['mastodon_url']
|
|
||||||
)
|
|
||||||
|
|
||||||
def main():
|
|
||||||
|
|
||||||
pixelfeed_get = requests.get('https://pixelfed.social/users/{}.atom'.format(username))
|
|
||||||
pixelfeed = atoma.parse_atom_bytes(pixelfeed_get.content)
|
|
||||||
|
|
||||||
latest_post = pixelfeed.entries[0]
|
|
||||||
last_updated_atom = latest_post.updated
|
|
||||||
if last_updated == last_updated_atom:
|
|
||||||
print("Up-to-date")
|
|
||||||
os._exit(0)
|
|
||||||
config['updated'] = last_updated_atom
|
|
||||||
with open(config_file, "w") as f:
|
|
||||||
toml.dump(config, f)
|
|
||||||
print("Config file updated")
|
|
||||||
image_name = latest_post.title.value
|
|
||||||
image_url = re.search("(?P<url>https?://[^\s]+)", latest_post.summary.value).group("url").rstrip('">').replace("_thumb", "")
|
|
||||||
tmp = tempfile.NamedTemporaryFile(suffix=".jpg")
|
|
||||||
get_image = requests.get(image_url)
|
|
||||||
tmp.write(get_image.content)
|
|
||||||
mastodon_media = mastodon.media_post(tmp.name)
|
|
||||||
mastodon.status_post(image_name, media_ids=mastodon_media['id'])
|
|
||||||
print("Status posted: ", image_name)
|
|
||||||
tmp.close()
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import tempfile
|
||||||
|
import textwrap
|
||||||
|
|
||||||
|
import atoma
|
||||||
|
import requests
|
||||||
|
import toml
|
||||||
|
from mastodon import Mastodon
|
||||||
|
|
||||||
|
homedir = os.getenv("HOME")
|
||||||
|
config_file = "{}/.pfxposter".format(homedir)
|
||||||
|
|
||||||
|
def create_config(config_file):
|
||||||
|
conf_includes = textwrap.dedent("""
|
||||||
|
updated = 2020-08-24 00:00:00+00:00
|
||||||
|
|
||||||
|
[mastodon]
|
||||||
|
mastodon_url = "https://oyd.social"
|
||||||
|
access_token = "your_access_token_here"
|
||||||
|
|
||||||
|
[pixelfed]
|
||||||
|
pixelfed_url = "https://pixelfed.social"
|
||||||
|
username = "username"
|
||||||
|
""")
|
||||||
|
with open(config_file, "w") as f:
|
||||||
|
f.write(conf_includes)
|
||||||
|
print("Configuration file created please edit")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
def syncronize(config_file, config, username, last_updated, mastodon):
|
||||||
|
pixelfeed_get = requests.get('https://pixelfed.social/users/{}.atom'.format(username))
|
||||||
|
pixelfeed = atoma.parse_atom_bytes(pixelfeed_get.content)
|
||||||
|
|
||||||
|
latest_post = pixelfeed.entries[0]
|
||||||
|
last_updated_atom = latest_post.updated
|
||||||
|
|
||||||
|
if last_updated == last_updated_atom:
|
||||||
|
print("Up-to-date")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
config['updated'] = last_updated_atom
|
||||||
|
|
||||||
|
with open(config_file, "w") as f:
|
||||||
|
toml.dump(config, f)
|
||||||
|
print("Config file updated")
|
||||||
|
|
||||||
|
image_name = latest_post.title.value
|
||||||
|
image_url = re.search(r"(?P<url>https?://[^\s]+)", latest_post.summary.value) \
|
||||||
|
.group("url") \
|
||||||
|
.rstrip('">') \
|
||||||
|
.replace("_thumb", "")
|
||||||
|
tmp = tempfile.NamedTemporaryFile(suffix=".jpg")
|
||||||
|
get_image = requests.get(image_url)
|
||||||
|
tmp.write(get_image.content)
|
||||||
|
mastodon_media = mastodon.media_post(tmp.name)
|
||||||
|
mastodon.status_post(image_name, media_ids=mastodon_media['id'])
|
||||||
|
print("Status posted: ", image_name)
|
||||||
|
tmp.close()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if not os.path.exists(config_file):
|
||||||
|
create_config(config_file)
|
||||||
|
|
||||||
|
config = toml.load(config_file)
|
||||||
|
|
||||||
|
username = config['pixelfed']['username']
|
||||||
|
last_updated = config['updated']
|
||||||
|
|
||||||
|
mastodon = Mastodon(
|
||||||
|
access_token=config['mastodon']['access_token'],
|
||||||
|
api_base_url=config['mastodon']['mastodon_url']
|
||||||
|
)
|
||||||
|
syncronize(config_file, config, username, last_updated, mastodon)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,3 +3,4 @@ Mastodon.py>=1.5.1
|
||||||
atoma>=0.0.17
|
atoma>=0.0.17
|
||||||
toml>=0.10.1
|
toml>=0.10.1
|
||||||
python-crontab>=2.5.1
|
python-crontab>=2.5.1
|
||||||
|
requests
|
9
setup.py
9
setup.py
|
@ -10,13 +10,10 @@ with open("README.md", "r") as fh:
|
||||||
long_description = fh.read()
|
long_description = fh.read()
|
||||||
|
|
||||||
def _post_install():
|
def _post_install():
|
||||||
conf_includes = 'updated = 2020-08-24 00:00:00+00:00\n\n[mastodon]\n mastodon_url = "https://oyd.social"\naccess_token = "your_access_token_here"\n\n[pixelfed]\npixelfed_url = "https://pixelfed.social"\nusername = "username"'
|
|
||||||
cron_job = CronTab(user=os.getenv("USER"))
|
cron_job = CronTab(user=os.getenv("USER"))
|
||||||
autochecker = cron_job.new(command='pfxposter')
|
autochecker = cron_job.new(command='pfxposter')
|
||||||
autochecker.minute.every(1)
|
autochecker.minute.every(1)
|
||||||
cron_job.write()
|
cron_job.write()
|
||||||
with open("{}/.pfxposter".format(os.getenv("HOME")), "w") as conf:
|
|
||||||
conf.write(conf_includes)
|
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='pfxposter',
|
name='pfxposter',
|
||||||
|
@ -45,10 +42,10 @@ setup(
|
||||||
"Programming Language :: Python :: Implementation :: PyPy",
|
"Programming Language :: Python :: Implementation :: PyPy",
|
||||||
"Topic :: Internet",
|
"Topic :: Internet",
|
||||||
],
|
],
|
||||||
entry_points={"console_scripts": ["pfxposter = pfxposter.pfxposter:main"]},
|
entry_points={"console_scripts": ["pfxposter = pfxposter.poster:main"]},
|
||||||
data_files=[('/home/{}/.pfxposter'.format(os.getenv("USER")), ['data/config.toml'])],
|
#data_files=[('/home/{}/.pfxposter'.format(os.getenv("USER")), ['data/config.toml'])],
|
||||||
python_requires=">=3.6",
|
python_requires=">=3.6",
|
||||||
install_requires=['Mastodon.py>=1.5.1', 'atoma>=0.0.17', 'toml>=0.10.1', 'python-crontab>=2.5.1']
|
install_requires=['Mastodon.py>=1.5.1', 'atoma>=0.0.17', 'toml>=0.10.1', 'python-crontab>=2.5.1', 'requests']
|
||||||
)
|
)
|
||||||
|
|
||||||
_post_install()
|
_post_install()
|
||||||
|
|
Loading…
Reference in New Issue