나는 어떻게 파이톤으로 무미건조한 대학 생활을 자동화했는가

안녕하세요.
나는 인도에서 온 2학년 컴퓨터 과학 본과생이다.나는 구렁이를 좋아한다.이것은 내가 dev.to 커뮤니티에 올린 첫 번째 문장이다.우리 시작합시다!
나의 학원에는 일반적인 학생이 등록되어 있는데 학생들은 이곳에서 그들의 개인 자료를 조회하고 숙제를 올리며 마감일을 얻고 수업 자료를 다운로드할 수 있다.

그러나 이 사이트는 찾아보기가 좀 지루해서 나는python으로 이런 무료한 것들을 자동화하기로 결정했다.그 중 하나는 임무 알림 서비스다.
본고에 대해 웹 요청 - 응답 모델의 작업 원리와 간단한python 지식을 알아야 합니다.그것은 두 부분으로 나눌 것이다.
시작!

알림 서비스


나의 첫해에, 나의 게으름 때문에, 나는 종종 몇몇 숫자 숙제의 업로드를 놓쳤다.
이 문제를 해결하기 위해서 나는 파이톤을 이용하여 웹 캡처를 하는 것을 배웠다.
나는 이것이 유용한 자원이라는 것을 발견했다.
https://www.dataquest.io/blog/web-scraping-tutorial-python/
Beautiful Soup과 Requests 라이브러리를 사용하는 법을 배우면 브라우저의 기능을 순서대로 모의하면 HTML/JSON 응답을 처리할 수 있습니다.
그리고 제 첫해 프로젝트로 제가 학생 로그인 중인 인증코드를 위해 해독 프로그램을 개발했다는 것을 알려드리고 싶습니다.인증번호는 다음과 같습니다.

나는 내가 어떻게 Dev.to에서 이 점을 해냈는지 설명하는 간단한 문장을 썼다.
내 GitHub 구성 파일에서 저장소를 찾을 수 있습니다.전화번호link입니다.
chrome 개발자 도구는 매우 편리합니다. 저는 그 중에서 네트워크 모니터를 사용했습니다.
내가 사용하는 논리는 다음과 같다.
  • 사이트를 열었고 개발자 도구에서 네트워크 모니터 옵션을 열었다.
  • 발송 중인 요청과 그 상세한 정보(제목, 폼-데이터, URL, 방법)를 관찰
  • 예를 들어 다음과 같은 요청이 있을 경우:
  •         method = POST, 
            form-data = {'uname': "username", 'passwd' "password"},
            url = "https://example.com/login", 
            headers = {"User-Agent":"blah blah"}
    
  • python 시뮬레이션 요청을 했습니다.
    따라서python 문법의 요청은 다음과 같습니다:
  •     import requests
        from bs4 import BeautifulSoup
        response = requests.post(
            "https://example.com/login", # URL
            {'username': "username", 'password' "password"}, # form-data
            headers = {"User-Agent":"blah blah"}, # headers
            verify=False   # this simply disables SSL security check
        )
        root = BeautifulSoup(response.text, "html.parser")
        print(root.prettify()) # pretty prints the response HTML
    
    작업 페이지는 다음과 같습니다.
  • 이런 방식으로 나는 HTML 내용을 얻어서 몇 줄을 써서 작업 페이지로 내비게이션했다.완성된 후에python의 해석 라이브러리BeautifulSoup를 사용했습니다.
  • BeautifulSoup은 HTML 응답을 트리 구조로 해석하는 것입니다. 낮은 지점으로 이동하려면 다음 하위 지점으로 이동하기만 하면 됩니다.위에서 언급한 문서 링크.
  • 모든 링크를 분석한 후 사전 목록 형식으로 할당된 모든 목록을 되돌려줍니다.
  • 다음에 해야 할 일은 그것을 Google Calendar API와 동기화하는 것이다.이 문서는 매우 적절하여 매우 쉽게 이해하고 실현할 수 있다.quickstart guide는 이미 시작하기에 충분하다.
  • 건전성 검사를 위해 몇 줄의 코드를 작성했고 마지막으로 이벤트를 만들어서 구글 달력 API를 요청했다. 코드는 다음과 같다.
  • # Refer to the Python quickstart on how to setup the environment:
    # https://developers.google.com/calendar/quickstart/python
    # Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
    # stored credentials.
    
    event = {
      'summary': 'Data Structures Assignment - 1',
      'description': 'Theory Assessment',
      'start': {
        'dateTime': '2018-03-28T09:17:30+05:30', 
        'timeZone': 'Asia/Kolkata', # my timezone
      },
      'end': {
        'dateTime': '2018-03-28T17:18:30+05:30', # 12 midnight is the deadline
        'timeZone': 'Asia/Kolkata',
      },
      'recurrence': [
        'RRULE:FREQ=DAILY;COUNT=1'
      ],
      'reminders': {
        'useDefault': False,
        'overrides': [
          {'method': 'email', 'minutes': 24 * 60}, # a day before start
          {'method': 'popup', 'minutes': 100}, # 100 minutes before start
        ],
      },
    }
    
    event = service.events().insert(calendarId='primary', body=event).execute()
    print 'Event created: %s' % (event.get('htmlLink'))
    
  • 이 부분을 함수에 포장하고 호출된 함수마다 마운트된 값을 부여합니다. 이 함수는 이벤트를 달력에 추가합니다.
  • 봐!나의 모든 숙제 마감일이 나의 달력에 나타나서 나는 휴대전화에서 그것들을 사용할 수 있다.다음은 내 홈 화면 위젯의 모양입니다.

  • 이외에 인증 코드를 자동으로 해독하고 텍스트 상자를 채울 수 있는 크롬 확장자를 개발했습니다.대학 홈페이지에서 다운로드한 내용을 관리하고 수업 코드와 교원 이름에 따라 분류해 해당 폴더로 구성한다.
    코스 리소스 페이지의 모양:

    확장자 없이 다운로드를 저장하는 방법:

    확장된 다운로드 시 다운로드를 저장하는 방법:
  • 당신은 extension page를 볼 수 있습니다. 1500여 명의 사용자가 있습니다. 그들은 제 학원의 학생입니다.JavaScript를 사용하여 구축하는 것을 배우는 것이 매우 재미있습니다!
  • 보너스!


    이것은 부분 자동화이지만, 너는 여전히 읽을 수 있다.매우 실용적이다.
    효율을 높이기 위해 저는 Google Sheets' 일일 계획 템플릿을 사용할 계획입니다.이것은 기본적으로 일주일을 기한으로 하는 활동 도표로, 날짜가 있고, 시간이 있다.
    나의 현재 일주일은 이렇다.

    빨간색 구역은 내가 당시에 없었다는 것을 표시한다.
    이 일의 묘미는 나의 시간표가 학기 내내 변하지 않기 때문에 내가 해야 할 일은 매주 일요일 저녁에 15분 정도 앉아서 일주일 내내 계획하는 것이다.
    지금 내가 원하는 것은 그것을 구글 달력에 동기화해서 휴대전화에서 나의 계획을 볼 수 있도록 하는 것이다.내가 사용하는 방법은 다음과 같다.
  • 명세표를 작성한다.네가 이렇게 할 때, 상응하는 시간을 조정해야 한다.위쪽 열에서 도구 -> 스크립트 편집기로 이동합니다.

  • 스크립트 편집기는 구글 응용 프로그램 API를 사용할 때 실행할 수 있도록 자바스크립트 함수를 만들 수 있도록 구글 스크립트를 위한 것입니다.다음은 사용할 수 있는 예시 코드 세션입니다.
    동일한 템플릿의 인덱스
  • 를 사용할 것입니다.
      var cal = CalendarApp.getDefaultCalendar();
      var dayOffset = 0; // replace this with the loop index
      var currSheet = SpreadsheetApp.getActiveSheet(); // gets the currently active sheet
      var startTimeString = currSheet.getRange(row, column).getValue() // replace row and column with desired values
      var startTime = new Date(startTimeString);
      startTime.setDate(startTime.getDate() + dayOffset);
      var endTime = new Date(startTimeString);
      endTime.setDate(startTime.getHour() + 1);
      var title = currSheet.getRange(row, column).getValue(); // specify the row and column of the cell
      cal.createEvent(title, startTime, endTime); // creates the event in calendar and syncs it
      }
    
  • 이것은 단지 예시적인 부분일 뿐이지만, 당신은 반드시 하나의 생각을 가지고 있어야 합니다.원하는 대로 조정하고 순환에서 모든 시간을 동기화합니다.나는 API를 좀 보기 귀찮아서 하드코딩을 좀 한다.
  • 다음은 제 코드입니다. 템플릿에 적용해야 합니다. 조금만 수정하면 됩니다-
    타임라인은 매크로가 아닌 문자열이므로 다음 간단한 공식을 사용하여 매크로로 변환합니다.
  • =C2 + 0.0416666 * <hour_number>
    
    여기, C2는 현재 주 셀입니다.셀의 속성을 조정하려면 셀을 클릭한 다음 색인 셀의 바로 위에 있는 매크로 부분으로 이동합니다.

    시간대가 8이면 오전 8:00입니다.나는 한 시간 안에 헤어지고 싶어서 다른 모든 시간에 이런 변화를 했다.이것은 내가 지금 사용하고 있는 스크립트다.0.041666은 기본적으로 하루의 1/24=1시간이다.
    function myFunction() {
      var cal = CalendarApp.getDefaultCalendar();
      var currSheet = SpreadsheetApp.getActiveSheet();
      var times = currSheet.getRange("B6:B20").getValues()
      var weekDate = currSheet.getRange("C2").getValue()
      var columns = ["C","D","E","F","G","H","I"]
      var offSet = 6;
      var totalDays = 7;
      var totalRows = 15;
      for(var i = 0; i < totalDays ; i++) {
        var column_no = columns[i] + "5:" + columns[i] + "20";
        var schedule = currSheet.getRange(column_no).getValues();
        for(var j = 0; j < totalRows; j++) {      
          var startTime = new Date(times[j]);
          startTime.setDate(startTime.getDate() + i);
          var title = currSheet.getRange(columns[i] +  (offSet + j).toString()).getValue();
          if(title === ""){
            continue;
          }
          var startTZoffSet = 240; // adjust hour in timezone
          var endTZoffSet = 180; // adjust hour in timezone
          var correctedStart = new Date(startTime.getTime() + (60000*(startTime.getTimezoneOffset() - startTZoffSet)));
          var correctedEnd = new Date(startTime.getTime() + (60000*(startTime.getTimezoneOffset() - endTZoffSet)));
          cal.createEvent(title, correctedStart, correctedEnd);
        }
      }
    }
    
    나는 이 스크립트를 실행했는데, 모든 사건이 구글 달력에 동기화되었다.
    이것이 바로 내가 대학에서 뭔가를 자동화하는 방식이다.만약 내가 당신을 도울 수 있는 것이 있거나, 혹은 당신에게 어떤 건의가 있다면, 평론을 하세요.
    Priyansh Jain

    좋은 웹페이지 즐겨찾기