Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
263 commits
Select commit Hold shift + click to select a range
8c2fd27
Merge branch 'master' of github.com:EU-ECDC/epitweetr
forchard Jul 9, 2025
437c504
adding remote repo to CI
forchard Jul 9, 2025
043b561
Mininal version increases to ensure epitweetr still compiles
forchard Jul 10, 2025
c7de4c9
Making epitweetr build again and with Renv
forchard Jul 15, 2025
dc9f4bd
feat: retrieve YMX work for bsky
EPI-YMX Jul 21, 2025
b3a962e
Merge pull request #2 from Epiconcept-Paris/bsky_integration
EPI-YMX Jul 21, 2025
23be7bc
feat: move plan logic to a dedicated file
EPI-YMX Jul 21, 2025
8b2e7f8
feat: move plan logic to a dedicated file
EPI-YMX Jul 21, 2025
02dab9a
feat: get_plan and bluesky_get_plan_elements
EPI-YMX Jul 21, 2025
b78d3ec
feat: update_plans accounts for network specificity
EPI-YMX Jul 21, 2025
85d8684
feat: finish_plan logic with network specificities
EPI-YMX Jul 21, 2025
3e93cae
wip: adapting bsky_search_topic to a more general naming
EPI-YMX Jul 21, 2025
6934833
wip: general small functions to be used in search topic
EPI-YMX Jul 21, 2025
adbb715
feat: rename bsky_ to bluesky_
EPI-YMX Jul 21, 2025
97b7491
feat: simplify bsky api calls arguments
EPI-YMX Jul 21, 2025
d5b5e49
feat: bluesky_search_topic works with functions calls based on networ…
EPI-YMX Jul 21, 2025
2873f2b
feat: bluesky_search_topic renamed to search_topic
EPI-YMX Jul 21, 2025
2598e33
fix: fixing plan content if it has failed because too long
EPI-YMX Jul 21, 2025
ccb190f
feat: search_loop working
EPI-YMX Jul 21, 2025
abe9410
fix: fixing vignettes based on new functions names
EPI-YMX Jul 22, 2025
e6fc9bf
Merge pull request #4 from Epiconcept-Paris/3-extract_plan
EPI-YMX Jul 22, 2025
7fa9d0e
test: removed rds containing bluesky token in test
EPI-YMX Jul 22, 2025
7449a3e
style: renaming files bsky with bluesky
EPI-YMX Jul 22, 2025
3055f00
style: renaming files for consistency
EPI-YMX Jul 22, 2025
b58a852
doc: logic implemented for search_loop for bsky
EPI-YMX Jul 22, 2025
4fd0fc4
feat: renaming bluesky extract elements
EPI-YMX Jul 22, 2025
4341fbe
doc: updating md with bluesky logic
EPI-YMX Jul 22, 2025
8b3a4d7
fix: fixing plan in update_plan
EPI-YMX Jul 22, 2025
23860ba
fix: fixing new plan creation logic
EPI-YMX Jul 23, 2025
1d2b385
Fixing launching epitweetr
forchard Aug 4, 2025
b9bdb96
Merge branch 'master' into dev
forchard Aug 4, 2025
af1d5d0
Integrating & simplifying bluesky search logic
forchard Aug 6, 2025
ce20e82
1. Fixing plan logic to properly scan tweets
forchard Aug 21, 2025
2fde2be
Improving naminng conventions for facilitating modularity
forchard Sep 8, 2025
514ff0e
Removed unused bluesky-api-time
forchard Sep 8, 2025
8fea53f
feat: add extended timeout for downloading big files and retraining l…
EPI-YMX Sep 9, 2025
0609612
Implementing modularity for multiple SM in search loop
forchard Sep 9, 2025
4ab3084
Merge remote-tracking branch 'origin/5-extend_timeout' into dev
forchard Sep 9, 2025
7952d1b
Transformation of Bluesky posts into common format
forchard Sep 12, 2025
6ac9a70
Modifying indexation and aggregations so it work with the generic pos…
forchard Sep 17, 2025
5e4c6d6
Fixing issues found after smoke tests
forchard Sep 18, 2025
6abf367
Fxing issues launching the search loop without calling setup config b…
forchard Sep 18, 2025
5c4f251
Fixing issue on geolocating texts bigger than 1024 tokens by limining…
forchard Sep 18, 2025
62f857f
Adding a yellow status for search loop monitoring to identify missing…
forchard Sep 19, 2025
977326d
1. Adding separate file per social media in search loop
forchard Sep 22, 2025
08477f3
Improving error message to explain to the user what to do when depend…
forchard Sep 22, 2025
366a1c0
quarto document to explore get_aggregates function and outputs
EPI-YMX Sep 23, 2025
ca26a06
df got from a call to calculate_regions_alerts (for exploratory purpo…
EPI-YMX Sep 23, 2025
7eba1d9
feat: edit get_reporting_date_counts() to count number of messages ba…
EPI-YMX Sep 23, 2025
e308267
feat: use geo_country_code column in calculate_region_alerts() instea…
EPI-YMX Sep 23, 2025
484ec70
feat: extend topic in get_topics_labels() with a lowercase version
EPI-YMX Sep 23, 2025
4c93675
feat: calculate_regions_alerts need topics in lowercase
EPI-YMX Sep 23, 2025
e2cad12
feat: switch "tweets" with "messages" in plot_trendline()
EPI-YMX Sep 23, 2025
ebfbdf5
wip: adapting create_map
EPI-YMX Sep 23, 2025
6ba5755
feat: create_topchart() adapted to bluesky
EPI-YMX Sep 23, 2025
4d9b066
feat: remove from trend_line
EPI-YMX Sep 23, 2025
b97dbad
feat: considering with_retweets in trend_line
EPI-YMX Sep 23, 2025
7ccf9f3
feat: updated the qmd doc
EPI-YMX Sep 23, 2025
07d21eb
Merge pull request #10 from Epiconcept-Paris/7-trend_line
EPI-YMX Sep 23, 2025
2bfb815
Merge pull request #14 from Epiconcept-Paris/9-adapt_topchart
EPI-YMX Sep 23, 2025
4ca8792
feat: plug trend_line and barchat into shiny app
EPI-YMX Sep 24, 2025
6faa54a
feat: export shiny app dataviz functions into an external file
EPI-YMX Sep 24, 2025
8a1a4ea
doc: update roxygen in create_topchart
EPI-YMX Sep 24, 2025
fb40675
fix: remove remaining location_type
EPI-YMX Sep 24, 2025
f612429
Merge pull request #15 from Epiconcept-Paris/13-trend_line_to_chart_t…
EPI-YMX Sep 24, 2025
497e15c
wip: adapting create_map
EPI-YMX Sep 23, 2025
66bd434
Merge branch '8-create_map' of github.com:Epiconcept-Paris/epitweetr …
EPI-YMX Sep 24, 2025
749813b
doc: added sf as dependency
EPI-YMX Sep 24, 2025
cd5d5a4
wip: map working.
EPI-YMX Sep 24, 2025
a1a586c
feat: create_map in explo.qmd
EPI-YMX Sep 24, 2025
65312a8
doc: add dplyr if_else in namespace
EPI-YMX Sep 24, 2025
fcf828f
feat: clean iso_a2 from rnaturalearthdata::countries50
EPI-YMX Sep 24, 2025
7f3a517
feat: compute map limits based on select coordinates system
EPI-YMX Sep 24, 2025
1d43301
feat: set map limits based on reprojected min max from WGS84 selected…
EPI-YMX Sep 24, 2025
d4a27c2
feat: edit map labels
EPI-YMX Sep 24, 2025
41b0970
feat: add try in get_aggregates call in create_topchart()
EPI-YMX Sep 24, 2025
7b2e9cb
clean in dataviz.R
EPI-YMX Sep 24, 2025
c693d0a
feat: remove use of input$location_type in shiny app
EPI-YMX Sep 24, 2025
ac314eb
feat: remove location_type parameter in dataviz funs
EPI-YMX Sep 24, 2025
1354b2b
wip: create_topchart tests in qmd with countries selected. Failing
EPI-YMX Sep 24, 2025
5085727
wip: updated explo.qmd
EPI-YMX Sep 29, 2025
29fd668
fix: updating create_topchart call in qmd to work with countries
EPI-YMX Sep 29, 2025
fdaefdc
Merge pull request #16 from Epiconcept-Paris/8-create_map
EPI-YMX Sep 29, 2025
0e8f80d
feat: remove location_type from shiny app UI
EPI-YMX Sep 29, 2025
0881d64
feat: removing "tweets" use in the dashboard tab of the app
EPI-YMX Sep 29, 2025
83ef4ff
feat: cleaning create_map
EPI-YMX Sep 29, 2025
d5c187d
fix: remove browser()
EPI-YMX Sep 29, 2025
bef7cbd
Merge pull request #17 from Epiconcept-Paris/clean_dataviz
EPI-YMX Sep 29, 2025
cb1288e
doc: remove sp dependency
EPI-YMX Sep 29, 2025
326422f
fix: remove YMX tags to identify modifications
EPI-YMX Sep 29, 2025
7a83e11
Merge pull request #18 from Epiconcept-Paris/clean_dataviz
EPI-YMX Sep 29, 2025
7d22e78
Merge pull request #19 from Epiconcept-Paris/adapt_dataviz_to_bsky
EPI-YMX Sep 29, 2025
6e9a822
style: apply air formatter
EPI-YMX Sep 29, 2025
d398e90
tests: remove unused unit tests
EPI-YMX Sep 29, 2025
6f34d40
doc: update doc to fix unit tests
EPI-YMX Sep 29, 2025
6941445
fix: remove twitter-api file
EPI-YMX Sep 29, 2025
69545eb
style: air formatter
EPI-YMX Sep 29, 2025
48fec39
Merge pull request #20 from Epiconcept-Paris/style_air_formatter
EPI-YMX Sep 29, 2025
760a9f0
feat: 2 versions of the app with 2 profiles
EPI-YMX Sep 29, 2025
d3b5299
feat: deal hide/show tabs with JS
EPI-YMX Sep 29, 2025
f8dc7e4
feat: add dashboard related functions with dataviz
EPI-YMX Sep 29, 2025
15303c5
feat: shiny app utils
EPI-YMX Sep 29, 2025
dcb2b01
feat: move some funs to utils
EPI-YMX Sep 29, 2025
c82aafa
Adding missing variables in cluster export for child search loop
forchard Sep 29, 2025
ae58c3a
merging changes for updating maps ans auto format update
forchard Sep 29, 2025
5e169b6
feat: set port and host for shiny app
EPI-YMX Sep 30, 2025
c8e4490
doc: update roxygen
EPI-YMX Sep 30, 2025
1e0891c
1. Adding limit to historic retrieval of posts not before 30 days
forchard Sep 30, 2025
03d0948
1. Incresing epitweetr version to 3.0.2
forchard Sep 30, 2025
43e0f41
feat: renaming epitweetr_app to episomer_app
EPI-YMX Sep 30, 2025
72e80e0
chore: renaming epitweetr to episomer
EPI-YMX Sep 30, 2025
67451f4
feat: switching calls to epitweetr to calls to episomer
EPI-YMX Sep 30, 2025
70f3859
feat: switching from epitweetr:: to episomer::
EPI-YMX Sep 30, 2025
c7245bd
Update .gitignore to keep .rd files and NAMESPACE
EPI-YMX Sep 30, 2025
07d6bc5
feat: 2 versions of the app with 2 profiles
EPI-YMX Sep 29, 2025
d156835
feat: deal hide/show tabs with JS
EPI-YMX Sep 29, 2025
11cc33d
feat: add dashboard related functions with dataviz
EPI-YMX Sep 29, 2025
9ab4544
feat: shiny app utils
EPI-YMX Sep 29, 2025
d9ceb90
feat: move some funs to utils
EPI-YMX Sep 29, 2025
5c4eeb6
feat: set port and host for shiny app
EPI-YMX Sep 30, 2025
62e575b
doc: update roxygen
EPI-YMX Sep 30, 2025
6b6d746
feat: renaming epitweetr_app to episomer_app
EPI-YMX Sep 30, 2025
2bcbeb7
Merge branch '21_try_speed_up_hide_show' of github.com:Epiconcept-Par…
EPI-YMX Sep 30, 2025
e3c7326
doc: devtools::document
EPI-YMX Sep 30, 2025
85af329
Merge pull request #22 from Epiconcept-Paris/21_try_speed_up_hide_show
EPI-YMX Sep 30, 2025
b5744ab
Merge branch 'dev' into renaming_pkg
EPI-YMX Sep 30, 2025
7c93e7f
Merge pull request #23 from Epiconcept-Paris/renaming_pkg
EPI-YMX Sep 30, 2025
f8516a5
Replacing any occurrence of epitweetr by episomer
forchard Sep 30, 2025
f6673b3
doc: remove epitweetr in roxygen tags
EPI-YMX Oct 1, 2025
4a67405
feat: save renaming of epitweetr to episomer
EPI-YMX Oct 1, 2025
9a95aab
feat: switching with_retweets by with_quotes
EPI-YMX Oct 1, 2025
795a5c5
removing episomer rds session of git
forchard Oct 2, 2025
8b1f299
Merge remote-tracking branch 'origin/remove_epitweetr_and_tweets' int…
forchard Oct 2, 2025
228b3ab
Making the choice of profile multiple selection and server side
forchard Oct 2, 2025
f2bb8c2
Adding filter by social media in dashboard
forchard Oct 3, 2025
5d7a908
Removing any reference on tweets or epitweetr
forchard Oct 3, 2025
4970164
Fixing issues after dasboard split + rename
forchard Oct 3, 2025
046c415
feat: bsky_user to bluesky_user
EPI-YMX Oct 6, 2025
02afeec
feat: sm_api_set_auth()
EPI-YMX Oct 6, 2025
dcab80e
feat: adapting shiny app
EPI-YMX Oct 6, 2025
5052ce9
feat: add specific tags to catch functions declarations
EPI-YMX Oct 6, 2025
00bc1b5
feat: add specific tags to catch functions declarations in bsky plan
EPI-YMX Oct 6, 2025
f35cbe0
feat: add_new_social_media()
EPI-YMX Oct 6, 2025
64a3046
doc: vignette for add_new_social_media
EPI-YMX Oct 6, 2025
c46140b
fix: clean add_new_media.R
EPI-YMX Oct 6, 2025
653cb28
doc: update rd
EPI-YMX Oct 6, 2025
f94d5b4
feat: simplify sm_api_set_auth()
EPI-YMX Oct 6, 2025
69aaaec
doc: add cli in dependencies
EPI-YMX Oct 6, 2025
7cdc17b
wip: fixing devtools check warnings for documentation
EPI-YMX Oct 6, 2025
d876352
fix: fix warnings appearing while running add_new_social_media()
EPI-YMX Oct 7, 2025
9f31fd6
fix: update vignette name in add_new_social_media()
EPI-YMX Oct 7, 2025
6d0dfdf
Reducing the scope of functions created for new social media to those…
forchard Oct 7, 2025
d67e9a9
Merging changes
forchard Oct 7, 2025
e7138ef
fix: typo
EPI-YMX Oct 8, 2025
581d59d
wip: harcode call to calculate_regions_alerts since I can't get data
EPI-YMX Oct 13, 2025
387d3bd
feat: hashtags to tags
EPI-YMX Oct 13, 2025
6f5553e
feat: fix alerts in shiny app
EPI-YMX Oct 13, 2025
c8139c7
doc: update rd
EPI-YMX Oct 13, 2025
aa44029
feat: export admin_app and dashboard_app
EPI-YMX Oct 17, 2025
1cfcec5
feat: compute alerts on selected social media
EPI-YMX Oct 17, 2025
1ca3ab6
feat: adapt DT in shiny app to social media in alerts
EPI-YMX Oct 17, 2025
a11a6ae
Merge pull request #28 from Epiconcept-Paris/alerts
EPI-YMX Oct 17, 2025
c9c45a1
Revert "Alerts"
EPI-YMX Oct 17, 2025
114f8d0
Merge pull request #29 from Epiconcept-Paris/revert-28-alerts
EPI-YMX Oct 17, 2025
b203918
feat: compute alert for multiple sm
EPI-YMX Oct 17, 2025
dc9d007
feat: adapt shiny app to new alerts
EPI-YMX Oct 17, 2025
ffb70d7
fix: remove YMX tag
EPI-YMX Oct 17, 2025
c58dcf1
1. Fixing issue on bluesky authentication
forchard Oct 17, 2025
7d87d30
Fixing merge conflicts
forchard Oct 17, 2025
e1f466b
Merge remote-tracking branch 'origin/alerts_multiple_sm' into dev
forchard Oct 17, 2025
8afd71b
Making topic code always lowercase
forchard Oct 17, 2025
ff57106
1. Fixing BUGS found on ECDC instance
forchard Oct 20, 2025
ae83a04
Updating libs and making compile works
forchard Oct 20, 2025
a3a441d
Updating dependencies records to new libraries
forchard Oct 20, 2025
749194d
Solving dependencies issues, geolocation is now working with Spark 4.…
forchard Oct 21, 2025
28615fa
Fixes after upgrade on : anonimisation, gelocalisation with user prov…
forchard Oct 23, 2025
e18ed12
wip: autosave config
EPI-YMX Oct 24, 2025
d430483
feat: remove save properties button to enable autosave
EPI-YMX Oct 24, 2025
2073e37
adding HADOOP_HOME/bin to the path when launching a spark job
forchard Oct 24, 2025
53d671c
Merge remote-tracking branch 'origin/31-autosave_conf' into dev
forchard Oct 24, 2025
58382a3
1. Updating query syntax to OR and AND (keeping / for synonims)
forchard Oct 24, 2025
beef50b
1. Including hadoop.dll in winutils download
forchard Oct 27, 2025
f7ee7bd
doc: remove tidytext
EPI-YMX Oct 28, 2025
9e34705
doc: remove use of ::: for internal functions
EPI-YMX Oct 28, 2025
a3705fe
doc: update roxygen to remove warnings
EPI-YMX Oct 28, 2025
322858c
doc: cleaning inst
EPI-YMX Oct 28, 2025
24b83bd
doc: remove "twitter"
EPI-YMX Oct 28, 2025
83ff22b
fix: fix vignettes img url
EPI-YMX Oct 28, 2025
08a5843
Merge pull request #33 from Epiconcept-Paris/devtoolscheck
EPI-YMX Oct 28, 2025
0d5037d
ci: add rhub workflow
EPI-YMX Oct 28, 2025
eec8044
ci: check in CI
EPI-YMX Oct 28, 2025
f94cd7a
ci: add windows and macos latest
EPI-YMX Oct 28, 2025
f3ced31
quick edit to run ci
EPI-YMX Oct 28, 2025
e1867a9
Merge pull request #35 from Epiconcept-Paris/test-ci
EPI-YMX Oct 28, 2025
4a87322
ci: Create check.yml
EPI-YMX Oct 28, 2025
82616be
ci: comment old CI check-r-code.yml
EPI-YMX Oct 28, 2025
290cbff
ci: add rhub.yml
EPI-YMX Oct 28, 2025
07ba6f5
ci: update ci on test-ci brancg
EPI-YMX Oct 28, 2025
6ffb6ad
ci: move ci files to root of the repo
EPI-YMX Oct 28, 2025
44a756e
ci: deal with episomer pkg location
EPI-YMX Oct 28, 2025
57c494c
ci: set working directory
EPI-YMX Oct 28, 2025
8319132
Update check.yaml
EPI-YMX Oct 28, 2025
192fa02
ci: clean ci
EPI-YMX Oct 28, 2025
a0d63c3
Delete .github/workflows/check.yml
EPI-YMX Oct 28, 2025
f54d52e
Delete .github/workflows/rhub.yml
EPI-YMX Oct 28, 2025
e569443
ci: remove workflow from r package root
EPI-YMX Oct 28, 2025
2253e2f
fix: remove native pip use
EPI-YMX Oct 28, 2025
7f2be21
doc: fix rd links
EPI-YMX Oct 28, 2025
e72c210
Updates on version 3.0.7
forchard Oct 31, 2025
c086859
Merge branch 'dev' of github.com:Epiconcept-Paris/episomer into dev
forchard Oct 31, 2025
c8fbfe8
Replacing java lib akka by pekko since not opensource anymore
forchard Oct 31, 2025
95dcf72
Adding waiting time before retry on closed index exception
forchard Oct 31, 2025
b912823
fix: account for error 502
EPI-YMX Nov 3, 2025
97dd786
Fixing error on alert generation when no posts have been collected fo…
forchard Nov 4, 2025
66aeef8
Merge remote-tracking branch 'origin/deal_with_error_502' into dev
forchard Nov 4, 2025
b928e9a
reducing the number of retries to 10
forchard Nov 4, 2025
3208b27
Fixing issues on search_loop infinite loop
forchard Nov 4, 2025
3e55785
feat: add req_retry everywhere
EPI-YMX Nov 5, 2025
6bf1051
Fixing error on missing columns for alert generation
forchard Nov 5, 2025
28d071b
Merge remote-tracking branch 'origin/40-retry_in_every_request' into dev
forchard Nov 5, 2025
f031c64
1. Fixing health_check post collection date identification
forchard Nov 5, 2025
4b46519
renaming check-r-code github workflow
forchard Nov 5, 2025
9284693
ci: run CI when PR on dev
EPI-YMX Nov 5, 2025
e3f8663
Merging from dev
forchard Nov 5, 2025
5cc2e99
doc: fixing devtools check
EPI-YMX Nov 5, 2025
2d1c063
Merge branch 'dev'
forchard Nov 5, 2025
3ab863c
Improving documentation
forchard Nov 6, 2025
28c4685
improvements in documentation
forchard Nov 6, 2025
07ea43c
Update DESCRIPTION
lauespinosa Nov 6, 2025
15744c3
Merge branch 'dev' of https://github.com/Epiconcept-Paris/episomer in…
lauespinosa Nov 6, 2025
bebd9bd
update vignette
lauespinosa Nov 7, 2025
b56d365
replacing epitweetr mentions by episomer
lauespinosa Nov 7, 2025
cea0c18
correcting grammar and typos
lauespinosa Nov 7, 2025
db4c850
Updating images to episomer
forchard Nov 7, 2025
b0c4b47
Merge branch 'dev' of github.com:Epiconcept-Paris/episomer into dev
forchard Nov 7, 2025
66e75db
1. Fixing error on alerts when few rows are returned by aggregates pr…
forchard Nov 10, 2025
34fe750
final documentation review
forchard Nov 12, 2025
fc2a0f8
Adding a more condervative default value for number of cores to avoin…
forchard Nov 12, 2025
e7fc481
Adding copy of language files in non temporary folder
forchard Nov 17, 2025
1683c37
Fixing issue on timeouts from scala API and new languages being ignor…
forchard Nov 25, 2025
f1b5d6e
Merge branch 'dev'
forchard Nov 26, 2025
fd41b81
Added all EUPL 1.2 license files.
casparecdc Nov 26, 2025
73da925
Fixing missing links in vignette and missing alerts in dashboard due …
forchard Nov 27, 2025
041f1f9
Merge branch 'main' of github.com:EU-ECDC/episomer into ecdc_main
forchard Nov 27, 2025
dda2360
Fixing syntax issue on author list
forchard Nov 27, 2025
ed662e2
Increasing to version 3.0.26
forchard Nov 27, 2025
35227cb
Fixing broken links in documentation
forchard Nov 27, 2025
b2701ea
Removing dev message
forchard Nov 27, 2025
9bb4d67
Fixing issues on licence changes on both repositories
forchard Nov 27, 2025
d6b03d3
Merge branch 'dev' into ecdc_main
forchard Nov 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions .github/workflows/check.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Workflow derived from https://github.com/posit-dev/setup-air/tree/main/examples
on:
pull_request:
branches: [main, master, dev]
push:
branches: [main, master, test-ci]

name: check.yml

permissions:
contents: write

jobs:
R-CMD-check:
runs-on: ${{ matrix.config.os }}

name: ${{ matrix.config.os }} (${{ matrix.config.r }})

strategy:
fail-fast: false
matrix:
config:
- { os: ubuntu-latest, r: "release" }
- { os: windows-latest, r: "release" }
- { os: macos-latest, r: "release" }

env:
R_KEEP_PKG_SOURCE: yes

steps:
- uses: actions/checkout@v4

- uses: r-lib/actions/setup-pandoc@v2

- uses: quarto-dev/quarto-actions/setup@v2

- uses: r-lib/actions/setup-r@v2
with:
r-version: ${{ matrix.config.r }}
http-user-agent: ${{ matrix.config.http-user-agent }}
use-public-rspm: true

- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::rcmdcheck
needs: check
working-directory: episomer

- uses: r-lib/actions/check-r-package@v2
with:
upload-snapshots: true
build_args: 'c("--no-manual","--compact-vignettes=gs+qpdf")'
working-directory: episomer

10 changes: 6 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
recover/
data/
maual/
manual/
renv
renv.lock
*.swp
*.swo
*.class
Expand All @@ -12,10 +14,11 @@ scala/project/build.properties
scala/project/target
scala/target
scala/lib_managed
scala/.bsp
scala/null
*.jar
epitweetr/java/ecdc-twitter-bundle_2.12-1.0-source.zip
epitweetr_*.pdf
episomer/java/ecdc-episomer-bundle_2.13-1.0-source.zip
episomer_*.pdf
vignette_*.pdf
install/
prerequisites
Expand Down Expand Up @@ -66,6 +69,5 @@ vignettes/*.pdf
.Rprofile

#Roxygen managed files
*/man/*.Rd
NAMESPACE
/.vs
2 changes: 1 addition & 1 deletion LICENSE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -284,4 +284,4 @@ the rights granted in Article 2 of this Licence and protect the covered Source
Code from exclusive appropriation.

All other changes or additions to this Appendix require the production of a new
EUPL version.
EUPL version.
53 changes: 53 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
SHELL = bash

define check_epi_home
@if [ $(origin EPI_HOME) == undefined ]; then echo "please set EPI_HOME is unset"; exit 1; fi
endef

define set_kr_pass
@export pa=`pass epitools/ecdc_kr_pwd` && if [ -z `printenv pa` ]; then pass insert epitools/ecdc_kr_pwd; fi
endef

init:
rm -rf renv/
rm -f .Rprofile
rm -f renv.lock
Rscript devscripts/renv.R


install-dependencies:
devscripts/install-dependencies.sh
package:
devscripts/package.sh

install-test:
Rscript devscripts/renv.test.R

app:
devscripts/app.sh

search:
devscripts/search.sh

search-sandboxed:
$(call check_epi_home)
$(call set_kr_pass)
@export ecdc_wtitter_tool_kr_password=`pass epitools/ecdc_kr_pwd` && \
R -e "devtools::load_all('epitweetr');epitweetr::setup_config('$$EPI_HOME');epitweetr::search_loop(sandboxed=TRUE)"

R:
devscripts/r-interpreter.sh

R-test:
$(call check_epi_home)
$(call set_kr_pass)
devscripts/package.sh
Rscript devscripts/renv.test.R
@export ecdc_wtitter_tool_kr_password=`pass epitools/ecdc_kr_pwd` && \
cd test && R

spark:
devscripts/spark-interpreter.sh

scala:
devscripts/scala-interpreter.sh
8 changes: 4 additions & 4 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
=========================================================================
====================== ECDC epitweetr Notice ======================
====================== ECDC episomer Notice ======================
=========================================================================

ECDC epitweetr package
Copyright 2020 The European Center of Disease Control (ECDC)
ECDC episomer package
Copyright 2025 The European Center of Disease Control (ECDC)

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Portions of this software were developed by Epiconcept.
Part of the code was commissioned by ECDC and produced by Epiconcept.

14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# epitweetr: Early Detection of Public Health Threats from Twitter Data
# episomer: Early Detection of Public Health Threats from Social Media Data

[epitweetr site](https://github.com/EU-ECDC/epitweetr)
[episomer site](https://github.com/EU-ECDC/episomer)

[Report bug & issues](https://github.com/EU-ECDC/epitweetr/issues)
[Report bug & issues](https://github.com/EU-ECDC/episomer/issues)

The `epitweetr` package allows you to automatically monitor trends of tweets by time, place and topic. This automated monitoring aims at early detecting public health threats through the detection of signals (e.g. an unusual increase in the number of tweets for a specific time, place and topic). The `epitweetr` package was designed to focus on infectious diseases, and it can be extended to all hazards or other fields of study by modifying the topics and keywords.
The `episomer` package allows you to automatically monitor trends of tweets by time, place and topic. This automated monitoring aims at early detecting public health threats through the detection of signals (e.g. an unusual increase in the number of tweets for a specific time, place and topic). The `episomer` package was designed to focus on infectious diseases, and it can be extended to all hazards or other fields of study by modifying the topics and keywords.

The general principle behind `epitweetr` is that it collects tweets and related metadata from the Twitter Standard API versions 1.1 (https://developer.twitter.com/en/docs/twitter-api/v1/tweets/search/overview/standard) and 2.0 (https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-recent) according to specified topics and stores these tweets on your computer on a database that can operate to calculate statistics or as a search engine. `epitweetr` geolocalises the tweets and collects information on key words, URLs, hashtags within a tweet but also entities and context detected by the Twitter API 2.0. Tweets are aggregated according to topic and geographical location. Next, a signal detection algorithm identifies the number of tweets (by topic and geographical location) that exceeds what is expected for a given day. If a number of tweets exceeds what is expected, `epitweetr` sends out email alerts to notify those who need to further investigate these signals following the epidemic intelligence processes (filtering, validation, analysis and preliminary assessment).
The general principle behind `episomer` is that it collects posts and related metadata from the Social Media APIs. Currently bluesky API is supportdd (https://docs.bsky.app/) according to specified topics and stores these tweets on your computer on a database that can operate to calculate statistics or as a search engine. `episomer` geolocalises the posts and collects information on key words, URLs, hashtags within a posts and are aggregated according to topic and geographical location. Next, a signal detection algorithm identifies the number of posts (by topic and geographical location) that exceeds what is expected for a given day. If a number of posts exceeds what is expected, `episomer` sends out email alerts to notify those who need to further investigate these signals following the epidemic intelligence processes (filtering, validation, analysis and preliminary assessment).

The package includes an interactive web application (Shiny app) with five pages: the dashboard, where a user can visualise and explore tweets (Fig 1), the alerts page, where you can view the current alerts and train machine learning models for alert classification on user defined categories (Fig 2), the geotag page, where you can evaluate the geolocation algorithm and provide annotations for improving its performance (Fig 3), the data protection page, where the user can search, anonymise and delete tweets from the epitweetr database to support data deletion requests (Fig 4), the configuration page, where you can change settings and check the status of the underlying processes (Fig 5), and the troubleshoot page, with automatic checks and hints for using `epitweetr` with all its functionalities (Fig 6).
The package includes an interactive web application (Shiny app) with five pages: the dashboard, where a user can visualise and explore tweets (Fig 1), the alerts page, where you can view the current alerts and train machine learning models for alert classification on user defined categories (Fig 2), the geotag page, where you can evaluate the geolocation algorithm and provide annotations for improving its performance (Fig 3), the data protection page, where the user can search, anonymise and delete tweets from the episomer database to support data deletion requests (Fig 4), the configuration page, where you can change settings and check the status of the underlying processes (Fig 5), and the troubleshoot page, with automatic checks and hints for using `episomer` with all its functionalities (Fig 6).

On the dashboard, users can view the aggregated number of tweets over time, the location of these tweets on a map and different most frequent elements found in or extracted from these tweets (words, hashtags, URLs, contexts and entities). These visualisations can be filtered by the topic, location and time period you are interested in. Other filters are available and include the possibility to adjust the time unit of the timeline, whether retweets/quotes should be included, what kind of geolocation types you are interested in, the sensitivity of the prediction interval for the signal detection, and the number of days used to calculate the threshold for signals. This information is also downloadable directly from this interface in the form of data, pictures, and/or reports.

More information is available in the epitweetr peer-review publication ( https://doi.org/10.2807/1560-7917.ES.2022.27.39.2200177).
More information is available in the episomer peer-review publication ( https://doi.org/10.2807/1560-7917.ES.2022.27.39.2200177).
2 changes: 1 addition & 1 deletion devscripts/R-dep-licenses.R
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# R script to get all R dependencies licenses
deps <- gtools::getDependencies("epitweetr")
deps <- gtools::getDependencies("episomer")
licences <- lapply(deps, function(p) list(package = p, license = packageDescription(p, fields="License")))
jsonlite::write_json(licences, "licenses/r-dep-licenses.json", pretty = T)

2 changes: 1 addition & 1 deletion devscripts/app.bat
Original file line number Diff line number Diff line change
@@ -1 +1 @@
R -e "epitweetr::epitweetr_app(Sys.getenv('EPI_HOME'))"
R -e "episomer::episomer_app(Sys.getenv('EPI_HOME'))"
5 changes: 3 additions & 2 deletions devscripts/app.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export ecdc_wtitter_tool_kr_password=$pass
expect -c '
spawn R
expect ">"
send "epitweetr::setup_config(\"'$EPI_HOME'\")\r"
send "epitweetr::epitweetr_app()\r"
send "devtools::load_all(\"episomer\")\r"
send "episomer::setup_config(\"'$EPI_HOME'\")\r"
send "episomer::episomer_app()\r"
interact'
2 changes: 1 addition & 1 deletion devscripts/build-manual.R
Original file line number Diff line number Diff line change
@@ -1 +1 @@
devtools::build_manual("epitweetr")
devtools::build_manual("episomer")
6 changes: 3 additions & 3 deletions devscripts/check-cran-remote.R
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
devtools::check_win_release("epitweetr")
#devtools::check_win_devel("epitweetr")
#devtools::check_win_old_release("epitweetr")
devtools::check_win_release("episomer")
#devtools::check_win_devel("episomer")
#devtools::check_win_old_release("episomer")
2 changes: 1 addition & 1 deletion devscripts/check-cran.R
Original file line number Diff line number Diff line change
@@ -1 +1 @@
devtools::check("epitweetr")
devtools::check("episomer")
4 changes: 2 additions & 2 deletions devscripts/createPackage.R
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
packageName <- "epitweetr"
packageName <- "episomer"
devtools::create(packageName)
devtools::use_vignette('epitweetr-vignette')
devtools::use_vignette('episomer-vignette')


2 changes: 1 addition & 1 deletion devscripts/detect.bat
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
R -e "epitweetr::detect_loop(Sys.getenv('EPI_HOME'))"
R -e "episomer::detect_loop(Sys.getenv('EPI_HOME'))"

4 changes: 2 additions & 2 deletions devscripts/detect.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ export ecdc_wtitter_tool_kr_password=$pass
expect -c '
spawn R
expect ">"
send "epitweetr::setup_config(\"'$EPI_HOME'\")\r"
send "epitweetr::detect_loop()\r"
send "episomer::setup_config(\"'$EPI_HOME'\")\r"
send "episomer::detect_loop()\r"
interact'
14 changes: 14 additions & 0 deletions devscripts/install-dependencies.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
sudo apt update
sudo apt install r-base
sudo apt install libcurl4-openssl-dev
sudo apt install libsodium-dev
sudo apt install pandoc
sudo apt install texlive-latex-base
sudo apt install texlive-fonts-recommended
sudo apt install libharfbuzz-dev libfribidi-dev

echo "deb https://repo.scala-sbt.org/scalasbt/debian all main" | sudo tee /etc/apt/sources.list.d/sbt.list
echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | sudo tee /etc/apt/sources.list.d/sbt_old.list
curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | sudo tee /etc/apt/trusted.gpg.d/sbt.asc
sudo apt update
sudo apt install sbt
5 changes: 0 additions & 5 deletions devscripts/installDependencies.sh

This file was deleted.

3 changes: 1 addition & 2 deletions devscripts/java_libs.sh
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
# updating scala depedencies file
export cdir=`pwd`
export SPARK_VERSION=3.0.3

cd "$cdir/scala"

rm -r "$cdir/scala/lib_managed"
sbt package
cd "$cdir/scala/lib_managed"

find . -type f > "$cdir/epitweetr/inst/extdata/sbt-deps.txt"
find . -type f > "$cdir/episomer/inst/extdata/sbt-deps.txt"

cd "$cdir"

55 changes: 30 additions & 25 deletions devscripts/package.R
Original file line number Diff line number Diff line change
@@ -1,47 +1,52 @@
# creating package and installing it
print(getwd())
repos = "https://cran.asnr.fr/"

if(!("devtools" %in% installed.packages()[,"Package"]))
install.packages("devtools")

#devtools::install_deps()
devtools::document()
#devtools::build_manual()
#devtools::build_vignettes()
install.packages("devtools", repos = repos)
fast <- FALSE

if(!fast) {
devtools::install_deps("episomer")
devtools::document("episomer")
renv::snapshot()
devtools::build_manual("episomer")
devtools::build_vignettes("episomer")
}

if(!file.exists(file.path("..", "install"))){
dir.create(file.path("..", "install"), showWarnings = FALSE)
if(!file.exists(file.path("install"))){
dir.create(file.path("install"), showWarnings = FALSE)
}
if(!file.exists(file.path("..", "manual"))){
dir.create(file.path("..", "manual"), showWarnings = FALSE)
if(!file.exists(file.path("manual"))){
dir.create(file.path("manual"), showWarnings = FALSE)
}

if(any(grepl("epitweetr.*", sessionInfo())))
detach("package:epitweetr", unload=TRUE)


if(any(grepl("episomer.*", sessionInfo())))
detach("package:episomer", unload=TRUE)

installer_path <- c(
devtools::build(binary=FALSE, vignettes=TRUE, manual=TRUE)
,devtools::build(binary=TRUE, vignettes=TRUE, manual=TRUE)
devtools::build("episomer", binary=FALSE, vignettes=TRUE, manual=TRUE)
,devtools::build("episomer", binary=TRUE, vignettes=TRUE, manual=TRUE)
)
install.packages(file.path(installer_path[[2]]), dependencies = FALSE)

#install.packages(file.path(installer_path[[2]]), dependencies = FALSE)
devtools::load_all("episomer")

#moving installer
installer_name <- (
c(paste("epitweetr_",packageVersion("epitweetr"),".tar.gz", sep = ""),
c(paste("episomer_",packageVersion("episomer"),".tar.gz", sep = ""),
if(.Platform$OS.type == "windows")
paste("epitweetr_",packageVersion("epitweetr"),".zip", sep = "")
paste("episomer_",packageVersion("episomer"),".zip", sep = "")
else
paste("epitweetr_",packageVersion("epitweetr"),"_R_x86_64-pc-linux-gnu.tar.gz", sep = "")
paste("episomer_",packageVersion("episomer"),"_R_x86_64-pc-linux-gnu.tar.gz", sep = "")
)
)
file.rename(file.path(installer_path), file.path("..", "install", installer_name))

manual_name <- paste("epitweetr_",packageVersion("epitweetr"),".pdf", sep = "")
#moving manual
#file.rename(file.path("..", manual_name), file.path("..", "manual", manual_name))

file.rename(file.path(installer_path), file.path("install", installer_name))
if(!fast) {
manual_name <- paste("episomer_",packageVersion("episomer"),".pdf", sep = "")
#moving manual
file.rename(file.path(manual_name), file.path("manual", manual_name))
}


8 changes: 4 additions & 4 deletions devscripts/package.bat
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ set SBT_OPTS="-Xmx6G"
cd "%cdir%\scala"
call sbt package

if not exist "%cdir%\epitweetr\inst\java" mkdir "%cdir%\epitweetr\inst\java"
copy "%cdir%\scala\target\scala-2.12\ecdc-twitter-bundle_2.12-1.0.jar" "%cdir%\epitweetr\inst\java"
if not exist "%cdir%\episomer\inst\java" mkdir "%cdir%\episomer\inst\java"
copy "%cdir%\scala\target\scala-2.12\ecdc-twitter-bundle_2.12-1.0.jar" "%cdir%\episomer\inst\java"

git archive --format zip --output "%cdir%/epitweetr/java/ecdc-twitter-bundle_2.12-1.0-source.zip" HEAD
git archive --format zip --output "%cdir%/episomer/java/ecdc-twitter-bundle_2.12-1.0-source.zip" HEAD

cd "%cdir%\epitweetr"
cd "%cdir%\episomer"

call Rscript.exe ..\devscripts\package.R

Expand Down
14 changes: 6 additions & 8 deletions devscripts/package.sh
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
# creating package and installing it
export cdir=`pwd`
export OPENBLAS_NUM_THREADS=1
export SPARK_VERSION=3.0.3
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
export PATH=$PATH:$JAVA_HOME/bin

cd "$cdir/scala"
sbt package

mkdir -p "$cdir/epitweetr/inst/java"
cp "$cdir/scala/target/scala-2.12/ecdc-twitter-bundle_2.12-1.0.jar" "$cdir/epitweetr/inst/java"
mkdir -p "$cdir/episomer/inst/java"
cp "$cdir/scala/target/scala-2.13/ecdc-episomer-bundle_2.13-1.0.jar" "$cdir/episomer/inst/java"

git archive --format zip --output "$cdir/epitweetr/java/ecdc-twitter-bundle_2.12-1.0-source.zip" HEAD
git archive --format zip --output "$cdir/episomer/java/ecdc-episomer-bundle_2.13-1.0-source.zip" HEAD

cd "$cdir/epitweetr"
Rscript ../devscripts/package.R
cd "$cdir"
Rscript devscripts/renv.R
Rscript devscripts/package.R

cd "$cdir"
Loading