@ilonikso

Изменились сслыки до документы в ВК (хеши)?

Добрый день, неделю назад я создавал похожий вопрос и пользователь SoreMix мне помог, но данная проблема возникла снова((

[Ссылка на вопрос] Изменились ссылки на документы и файлы ВК?

Если кратко, в ВК есть обсуждение, в котором пользователи выкладывают пакет для игры Своя Игра (SIGame) и чтобы упростить людям жизнь я решил выбирать лучшие пакеты и записывать их в гугл док, которым могли бы пользоваться все и легко искать пакеты по темам.

И сейчас ВК изменил хеши в ссылках для всех прикрепленных файлов и ссылки в моей таблице стали неактуальными. Возможно ли как-то собрать все ссылки из обсуждения вк и сравнить их с ссылками в таблице и если они изменились, заменить их?

SoreMix подсказал мне направление, но к сожалению, у меня не получается больше с ним связаться((

SoreMix дал следующие советы:

1. Собрать все ссылки из таблицы
2. Собрать все ссылки из темы в ВК
3. Каждую ссылку из таблицы, обрезанной до хэша, сравнить со всеми ссылками из темы ВК, тоже обрезанными
4. Если ссылки совпадают, сохранить их куда нибудь в список
5. Прочитать все колонки с ссылками в таблице, если обрезанная ссылка совпадает с обрезанной восстановленой, то записать вост. ссылку в эту ячейку таблицы

Но к сожалению, у меня практически нет опыта работы с vk api, google doc api и другими инструментами чтобы это реализовать((

Если у кого-либо есть подобный опыт, или может дать совет, я буду рад любой помощи.

С уважением, Илья
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
SoreMix
@SoreMix
yellow
Да, я забыл случайно, редко телеграмом пользуюсь. У меня много хардкода разного, потому что делал разово.

Сейчас нет возможность склеить все в один файл, могу просто сурсы отдать

Для начала нужно достать все ссылки, которые есть.
second.xlsx - название дока с данными из таблицы
urls.txt - текстовик, куда будут сохранены ссылки на доки вк
Таблицы разные были по структуре, поэтому тут два варианта, один когда есть просто ссылка на док, второй вариант когда ссылка сделана в виде гипер ссылки

from openpyxl import load_workbook
import time
import re

wb = load_workbook('second.xlsx')

with open('urls.txt', 'w', encoding='utf-8') as f:

    for sheetname in wb.sheetnames:
        sheet = wb[sheetname]

        for i in range(1, sheet.max_row+1):
            content = sheet.cell(row=i, column=4).value
            if content:

                f.write(content + '\n')
                
                '''url = re.search(r'=HYPERLINK\("(.+?)"', content)
                
                if url:
                    f.write(url.group(1).split('?')[0] + '\n')'''


Второй скрипт для парсинга темы и поска всех документов, которые заливали в тему.
app_id - ID приложения с https://vk.com/apps?act=manage
login, password - логин и пароль от ВК

Сначала собираются все доки, затем читаются ссылки, которые сохранили на прошлом шаге.
Пробегаем по каждому доку, обрезаем его до знака ?, чтобы получить базу, т.е. vk.com/document123_123
Пробегаем по всем URL из прошлого шага, если базовая часть дока есть в URL, то новая ссылка записывается в файл restored.txt

import vk_requests
import time
import json

app_id = 'todo'
login = 'todo'
password = 'todo'

api = vk_requests.create_api(app_id=app_id, login=login, password=password)


def get_docs():

    all_docs = []

    comments_count = api.board.getComments(group_id=135725718, topic_id=34975471, count=1, offset=3)['count']

    for x in range(comments_count//100 + 1):

        print('Parsing {}/{} page'.format(x, comments_count//100 + 1))

        comments = api.board.getComments(group_id=135725718, topic_id=34975471, count=100, offset=x * 100)['items']

        for comment in comments:
            attachments = comment.get('attachments', None)

            if attachments:
                for attachment in attachments:
                    if attachment['type'] != 'doc':
                        continue
                    
                    attachment_url = attachment['doc'].get('url', None)

                    if attachment_url:
                        all_docs.append(attachment_url)

        time.sleep(0.3)

    return all_docs



if __name__ == '__main__':
    
    docs = get_docs()

    with open('urls.txt', 'r', encoding='utf-8') as f:
        urls = f.readlines()

    with open('restored.txt', 'w', encoding='utf-8') as f:
        for doc in docs:
            base_doc = doc.split('?')[0]

            for url in urls:
                if base_doc in url:
                    f.write(doc + '\n')


Последний скрипт читает исходный файл с таблицей, читает все ссылки из прошлого шага. Пробегает по всем колонкам с ссылками, если база этой ссылки есть в списке восстановленых ссылок, то ячейка перезаписывает на восстановленую ссылку. Далее сохраняется

second.xlsx - таблица с данными
restored.txt - файл с новыми ссылками из прошлого шага

from openpyxl import load_workbook
import re


wb = load_workbook('second.xlsx')

with open('restored.txt', 'r', encoding='utf-8') as f:
    restored_urls = f.readlines()


for sheetname in wb.sheetnames:
    sheet = wb[sheetname]

    for i in range(1, sheet.max_row+1):
        content = sheet.cell(row=i, column=4).value

        if content:
            url = content
            base_url = url.split('?')[0]

            for restored_url in restored_urls:
                if base_url in restored_url:
                    sheet.cell(row=i, column=4).value = restored_url
            
        
        '''if content:
            url = re.search(r'=HYPERLINK\("(.+?)"', content)
                
            if url:
                base_url = url.group(1).split('?')[0]

                for restored_url in restored_urls:
                    if base_url in restored_url:
                        cell_text = '=HYPERLINK("{}";"Скачать")'.format(restored_url)
                        sheet.cell(row=i, column=4).value = cell_text'''


wb.save('restored2.xlsx')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы