Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
__pycache__
venv
47 changes: 24 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,39 @@
לפני סגירה,
לפני סגירה‫,
אמנם גיביתי כבר את הבלוג שלי, בפעם הקודמת שהיה חשש לסגירה, אבל הפעם רציתי לנסות לבצע גיבוי רציני יותר שישמר כמה שיותר ממאפייני הבלוג וייצור ארכיון אמיתי.

שימו לב, זה הרבה יותר טוב מגיבוי רגיל!
שימו לב, זה הרבה יותר טוב מגיבוי רגיל‫!

אז ראשית - גיבוי התכנים## .
## ‫ גיבוי התכנים

מנגנון הגיבוי לצערי הרב לא משמר את המידע בצורה מסודרת, אלא בעיקר זורק את התוכן בערבוביה.
כדי לגבות את הבלוג על פי שנים, עם תגובות, צריך להשתמש בקישור הבא, ורק לשנות את השנה ב URL בכל פעם. (בשני מקומות, שימו לב)
http://israblog.nana10.co.il/edit/backup_this.asp?FromDay=1&FromMonth=1&FromYear=2003&ToDay=31&ToMonth=12&ToYear=2003&DocType=html&IncludeComments=on
מנגנון הגיבוי לצערי הרב לא משמר את המידע בצורה מסודרת, אלא בעיקר זורק את התוכן בערבוביה‫.
כדי לגבות את הבלוג על פי שנים, עם תגובות, צריך להשתמש בקישור הבא, ורק לשנות את השנה ב‫ URL בכל פעם. (בשני מקומות, שימו לב)
http://israblog.org/edit/backup_this.asp?FromDay=1&FromMonth=1&FromYear=2003&ToDay=31&ToMonth=12&ToYear=2003&DocType=html&IncludeComments=on
(אם לא מופיע כלום, ודאו שאתם מחוברים לחשבון ובנוסף, שאכן יש תוכן בשנים שנבחרו.
לאחר שהדף עם התכנים מופיע, שומרים את הדף (כפתור ימני, save as, בוחרים web page - complete) בתיקיה נקיה על המחשב (תיקיית israblog) כשבתור שם מכניסים את השנה (חשוב, למען הסדר הטוב) ואז עוברים לשנה הבאה, עד 2017.

בסיום התהליך, תהיה לכם תיקיה שבה קבצי html ותיקיות על פי שנה.
בסיום התהליך, תהיה לכם תיקיה שבה קבצי‫ html ותיקיות על פי שנה.

זה הזמן לוודא שאכן שמרתם את כל השנים ולא פספסתם אף שנה.
זה הזמן לוודא שאכן שמרתם את כל השנים ולא פספסתם אף שנה‫.

גיבוי עיצוב הבלוג##
## ‫ גיבוי עיצוב הבלוג

גם לעיצוב הבלוג הנוסטלגי יש חשיבות בעיני. כדי לגבות את העיצוב, הולכים לדף כלשהו בבלוג (עדיף הדף הראשי של הבלוג) ושומרים באמצעות לחיצה על הכפתור הימני, save as ובפורמט complete.
חשוב מאד: לקובץ יש לקרוא template.html
גם לעיצוב הבלוג הנוסטלגי יש חשיבות בעיני. כדי לגבות את העיצוב, הולכים לדף כלשהו בבלוג (עדיף הדף הראשי של הבלוג) ושומרים באמצעות לחיצה על הכפתור הימני‫, save as ובפורמט complete.
חשוב מאד: לקובץ יש לקרוא‫ template.html

אני נתקלתי בבעיות קלות בשמירת ה template שלי, בעיקר כי היו שם רכיבי פלאש ישנים שכבר לא פעלו.
שימו לב שרצוי לנטרל את כל המנגנונים שחוסמים פרסומות וכו׳, כדי לשמור כמה שיותר רכיבים.
אני נתקלתי בבעיות קלות בשמירת ה‫ template שלי, בעיקר כי היו שם רכיבי פלאש ישנים שכבר לא פעלו.
שימו לב שרצוי לנטרל את כל המנגנונים שחוסמים פרסומות וכו׳, כדי לשמור כמה שיותר רכיבים‫.

גיבוי לפורמט וורד##
גיבוי לפורמט וורד‫##

אני לא אוהב את הפורמט הזה, אבל כגיבוי לגיבוי ורק כי אולי משהו שם יהיה שימושי, אני ממליץ לשמור גם גיבוי בפורמט הזה.
http://israblog.nana10.co.il/edit/backup_this.asp?FromDay=1&FromMonth=1&FromYear=2003&ToDay=31&ToMonth=12&ToYear=2003&DocType=doc&IncludeComments=on
אני לא אוהב את הפורמט הזה, אבל כגיבוי לגיבוי ורק כי אולי משהו שם יהיה שימושי, אני ממליץ לשמור גם גיבוי בפורמט הזה‫.
http://israblog.nana10.org/edit/backup_this.asp?FromDay=1&FromMonth=1&FromYear=2003&ToDay=31&ToMonth=12&ToYear=2003&DocType=doc&IncludeComments=on

## ‫ עיבוד והמרת התוכן למשהו מסודר יותר

עיבוד והמרת התוכן למשהו מסודר יותר##

מתישהו, מזמן, כשיריב התלבט לאיזה פורמט לכתוב מנוע גיבוי, הפצרתי בו לאפשר ייצוא ל xml. זה היה לפני ש json היה נפוץ, והיה חוסך לי את השלב הזה, או לפחות הופך אותו לקל בהרבה.
כדי להמיר את קבצי ה html לפורמט מסודר יותר, אשב עכשיו לכתוב סקיפט פייתון שינסה:
- לזהות בהצלחה את הקטעים השונים
- לייצר קובץ xml יחיד שמכיל את כל הפוסטים (אני בד״כ מעדיף JSON, אבל כשמדובר בפוסטים עם הרבה שורות, עיצוב, תוכן וכו׳, מוטב XML)
- לנקות את ה template ששמרנו קודם.
מתישהו, מזמן, כשיריב התלבט לאיזה פורמט לכתוב מנוע גיבוי, הפצרתי בו לאפשר ייצוא ל‫ xml. זה היה לפני ש json היה נפוץ, והיה חוסך לי את השלב הזה, או לפחות הופך אותו לקל בהרבה.
‫הסקריפט שכאן ממיר את קבצי הHTML לפורמט מסודר יותר (XML או JSON).
‫הסקריפט:
- ‫מזהה בהצלחה את הקטעים השונים
- ‫מייצר קובץ xml יחיד שמכיל את כל הפוסטים (אני בד״כ מעדיף JSON, אבל כשמדובר בפוסטים עם הרבה שורות, עיצוב, תוכן וכו׳, מוטב XML)
- ‫מנקה את ה template ששמרנו קודם.
- ‫למי שצריך יש גם סקריפט שממיר את קובץ הגיבוי של ישראבלוג לXML של וורדפרס. כמעט כל פלטפורמות הבלוגים תומכות ביבוא הקבצים הללו.
37 changes: 37 additions & 0 deletions src/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Israblog Backup

## Version

Version 12.4.

## Requirements

- Python 3

## Installation and Usage (Source directory!)

1. Save your Israblog backup (in accordance with the main [README](https://github.com/shirblc/israblog/blob/master/README.md)).
2. Download or clone the repo.
3. cd into the project directory.
4. cd into src.
5. Run ```pip install -r requirements.txt``` to install dependencies (they're necessary for the Wordpress conversion).
6. Update the ```BACKUP_FOLDER``` constant to the location of your downloaded backup.
- If you want to use the Wordpress converter, do it in the [convert_to_wp file](https://github.com/shirblc/israblog/blob/master/src/convert_to_wp.py).
- Otherwise, do it in the [convert file](https://github.com/shirblc/israblog/blob/master/src/convert.py).
7. Run the script:
- If using the Wordpress converter, run ```python convert_to_wp.py``` (run ```python3 convert_to_wp.py``` if you're on macOS).
- If using the regular converter, run ```python convert.py``` (run ```python3 convert.py``` if you're on macOS).

## Contents

1. **convert.py** - Converts the Israblog HTML backup into XML/JSON.
2. **convert_to_wp.py** - Converts the Israblog HTML backup into a Wordpress XML.
3. **download_blog_posts.py** - Crawls over the given blog and saves its posts.

## Dependencies

1. **pytz** - A timezone utility for Python. For more information, check their [PyPI page](https://pypi.org/project/pytz/).

## Known Issues

There are no current issues at the time.
24 changes: 14 additions & 10 deletions src/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

RE_COMMENT = '<p class="MsoNormal" dir="RTL" lang="HE" style="font-size:10.0pt; font-family: Arial; margin-right:([\d\.]+)in">(.*)'
RE_POST = '<p class="MsoNormal" dir="RTL" lang="HE" style="font-size:12.0pt; font-family: Arial">'
RE_BREAKER_AND_POST = '<br clear="all" style="mso-special-character:line-break;page-break-before:always"><p class="MsoNormal" dir="RTL" lang="HE" style="font-size:12.0pt; font-family: Arial">'
RE_DATE = '>(\d\d?/\d\d?/\d{1,4} \d\d?:\d\d?:\d\d?)<'
RE_PAGE_END = '<!--xgemius|<script '
RE_COMMENT_TS = ', (\d\d?:\d\d? \d\d?/\d\d?/\d{1,4}):<br>'
Expand Down Expand Up @@ -210,6 +211,10 @@ def parse_post_header(self, row):
self.posts.append(new_post)

def parse_comment_header(self, row):
"""
Create a new comment object and add data to it
:param str row:
"""
comment_header = re.search(RE_COMMENT, row)
new_comment = BlogComment()

Expand Down Expand Up @@ -247,7 +252,7 @@ def set_state(self, new_state):

def process_row(self, row):
"""

Read the current row and deal with it in accordance with its type
:type row: str
"""

Expand All @@ -271,6 +276,9 @@ def process_row(self, row):
# a blog comment started
self.parse_comment_header(row)
self.set_state(STATE_COMMENT)
elif re.search(RE_BREAKER_AND_POST, row):
self.parse_post_header(row)
self.set_state(STATE_POST)
elif re.search(RE_PAGE_END, row):
self.set_state(STATE_OUT)
else:
Expand All @@ -294,7 +302,7 @@ def process_row(self, row):
else:
# Just add as-is
self.current_blog_comment.body += row + '\n'
elif re.search(RE_POST, row):
elif re.search(RE_POST, row) or re.search(RE_BREAKER_AND_POST, row):
self.parse_post_header(row)
self.set_state(STATE_POST)
elif re.search(RE_COMMENT, row):
Expand Down Expand Up @@ -324,12 +332,8 @@ def parse_backup_files(backup_files_list):
"""
parsed_data = []
for filename in backup_files_list:
# with codecs.open(os.path.join(BACKUP_FOLDER, filename), encoding='cp1255') as backup_file:
# file_text = backup_file.readlines()
with open(os.path.join(BACKUP_FOLDER, filename)) as backup_file:
with open(os.path.join(BACKUP_FOLDER, filename), encoding='cp1255') as backup_file:
file_text = backup_file.read()
file_text = file_text.decode("cp1255", errors='ignore')
file_text = file_text.encode('UTF-8', errors='ignore')
parse_obj = ParseBackupFile(file_text.splitlines())
new_data = parse_obj.process()
parsed_data += new_data
Expand All @@ -338,13 +342,13 @@ def parse_backup_files(backup_files_list):
return parsed_data


def get_backup_files():
def get_backup_files(backup_folder):
"""
Search folder for html backup files
:return: A list of backup files
:rtype: list
"""
all_files = os.listdir(BACKUP_FOLDER)
all_files = os.listdir(backup_folder)
logging.debug(all_files)

file_list = []
Expand Down Expand Up @@ -386,7 +390,7 @@ def save_parsed_data(parsed_data):


def main():
backup_files_list = get_backup_files()
backup_files_list = get_backup_files(BACKUP_FOLDER)
parsed_data = parse_backup_files(backup_files_list)
save_parsed_data(parsed_data)

Expand Down
Loading